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

List:       kde-commits
Subject:    [kdepim/work/akonadi-ports] /: Use single Akonadi session for all jobs
From:       Frank Osterfeld <frank.osterfeld () kdab ! com>
Date:       2011-09-17 23:42:51
Message-ID: 20110917234251.AD1DAA607A () git ! kde ! org
[Download RAW message or body]

Git commit ca6edf3f713697c43234a3ce5a4638faa0de7504 by Frank Osterfeld.
Committed on 18/09/2011 at 00:08.
Pushed by osterfeld into branch 'work/akonadi-ports'.

Use single Akonadi session for all jobs
Remove usage of several now outdated Krss classes
various cleanup

M  +2    -2    akregator/src/CMakeLists.txt
M  +2    -4    akregator/src/akregator_part.cpp
M  +3    -6    akregator/src/articlelistview.cpp
M  +6    -25   akregator/src/createfeedcommand.cpp
M  +2    -9    akregator/src/createfeedcommand.h
M  +32   -50   akregator/src/mainwidget.cpp
M  +5    -0    akregator/src/mainwidget.h
M  +9    -12   akregator/src/selectioncontroller.cpp
M  +3    -1    akregator/src/selectioncontroller.h
M  +11   -1    akregator/src/setupakonadicommand.cpp
M  +18   -22   krss/krss/feeditemmodel.cpp
M  +6    -8    krss/krss/feeditemmodel.h
M  +11   -11   krss/krss/feedpropertiescollectionattribute.cpp
M  +3    -1    krss/krss/feedpropertiescollectionattribute.h
M  +1    -0    krss/krss/resourcemanager.cpp
M  +2    -1    krss/krss/subscriptionlabelscollectionattribute.h
M  +13   -10   krss/krss/ui/feedlistview.cpp

http://commits.kde.org/kdepim/ca6edf3f713697c43234a3ce5a4638faa0de7504

diff --git a/akregator/src/CMakeLists.txt b/akregator/src/CMakeLists.txt
index 21feedd..2d385f4 100644
--- a/akregator/src/CMakeLists.txt
+++ b/akregator/src/CMakeLists.txt
@@ -39,7 +39,7 @@ set(akregatorprivate_LIB_SRCS
 
 kde4_add_library(akregatorprivate SHARED ${akregatorprivate_LIB_SRCS})
 
-target_link_libraries(akregatorprivate kdepim  ${KDE4_KHTML_LIBS} \
${KDEPIMLIBS_SYNDICATION_LIBS} akregatorinterfaces) \
+target_link_libraries(akregatorprivate kdepim  ${KDE4_KHTML_LIBS} \
akregatorinterfaces)  target_link_libraries(akregatorprivate LINK_INTERFACE_LIBRARIES \
${KDE4_KHTML_LIBS} )  
 set_target_properties(akregatorprivate
@@ -107,7 +107,7 @@ kde4_add_ui_files(akregatorpart_PART_SRCS
 kde4_add_plugin(akregatorpart ${akregatorpart_PART_SRCS})
 
 # add ${LIBKRSS_LIBRARIES} when moving libkrss into kdepimlibs
-target_link_libraries(akregatorpart  ${KDE4_KUTILS_LIBS} ${KDE4_KNOTIFYCONFIG_LIBS} \
${KDE4_SOLID_LIBRARY} akregatorinterfaces akregatorprivate kdepim \
${KDEPIMLIBS_SYNDICATION_LIBS} ${KDEPIMLIBS_KPIMUTILS_LIBS}  ${KDE4_KDE3SUPPORT_LIBS} \
krss ${KDE4_AKONADI_LIBS}) +target_link_libraries(akregatorpart  ${KDE4_KUTILS_LIBS} \
${KDE4_KNOTIFYCONFIG_LIBS} ${KDE4_SOLID_LIBRARY} akregatorinterfaces akregatorprivate \
kdepim ${KDEPIMLIBS_KPIMUTILS_LIBS}  ${KDE4_KDE3SUPPORT_LIBS} krss \
${KDE4_AKONADI_LIBS})  
 install(TARGETS akregatorpart  DESTINATION ${PLUGIN_INSTALL_DIR})
 
diff --git a/akregator/src/akregator_part.cpp b/akregator/src/akregator_part.cpp
index 9123537..861399a 100644
--- a/akregator/src/akregator_part.cpp
+++ b/akregator/src/akregator_part.cpp
@@ -41,8 +41,6 @@
 #include <krss/resourcemanager.h>
 #include <krss/tagprovider.h>
 
-#include <syndication/dataretriever.h>
-
 #include <libkdepim/broadcaststatus.h>
 
 #include <knotifyconfigwidget.h>
@@ -176,6 +174,7 @@ void Part::slotAkonadiSetUp( KJob* job ) {
         QApplication::quit();
         return;
     }
+#ifdef KRSS_PORT_DISABLED
     KRss::RetrieveFeedListJob * const fjob = new KRss::RetrieveFeedListJob( \
m_mainWidget );  fjob->setResources( KRss::ResourceManager::self()->resources() );
     connect( fjob, SIGNAL( result( KJob* ) ), this, SLOT( slotFeedListRetrieved( \
KJob* ) ) ); @@ -184,6 +183,7 @@ void Part::slotAkonadiSetUp( KJob* job ) {
     KRss::TagProviderRetrieveJob * const tjob = new KRss::TagProviderRetrieveJob( \
                m_mainWidget );
     connect( tjob, SIGNAL( result( KJob* ) ), this, SLOT( slotTagProviderRetrieved( \
KJob* ) ) );  tjob->start();
+#endif
 }
 
 void Part::slotStarted()
@@ -210,8 +210,6 @@ void Part::slotSettingsChanged()
 {
     NotificationManager::self()->setWidget(isTrayIconEnabled() ? \
m_mainWidget->window() : 0, componentData());  
-    Syndication::FileRetriever::setUseCache(Settings::useHTMLCache());
-
     QStringList fonts;
     fonts.append(Settings::standardFont());
     fonts.append(Settings::fixedFont());
diff --git a/akregator/src/articlelistview.cpp b/akregator/src/articlelistview.cpp
index 3de97a0..4c26443 100644
--- a/akregator/src/articlelistview.cpp
+++ b/akregator/src/articlelistview.cpp
@@ -63,6 +63,7 @@ bool FilterDeletedProxyModel::filterAcceptsRow( int source_row, \
const QModelInde  
 SortColorizeProxyModel::SortColorizeProxyModel( QObject* parent ) : \
QSortFilterProxyModel( parent ), m_keepFlagIcon( KIcon( "mail-mark-important" ) )  {
+    setDynamicSortFilter( true );
 }
 
 bool SortColorizeProxyModel::filterAcceptsRow ( int source_row, const QModelIndex& \
source_parent ) const @@ -129,8 +130,6 @@ static bool isRead( const QModelIndex& idx \
)  
 void ArticleListView::setItemModel( QAbstractItemModel* model )
 {
-    setModel( model );
-#if 0
     if ( !model ) {
         setModel( model );
         return;
@@ -141,15 +140,14 @@ void ArticleListView::setItemModel( QAbstractItemModel* model )
     m_proxy->setSourceModel( model );
     m_proxy->setSortRole( FeedItemModel::SortRole );
     m_proxy->setFilters( m_matchers );
-#if 0
+
     FilterDeletedProxyModel* const proxy2 = new FilterDeletedProxyModel( model );
     proxy2->setSortRole( FeedItemModel::SortRole );
     proxy2->setSourceModel( m_proxy );
-#endif
 
     FilterColumnsProxyModel* const columnsProxy = new FilterColumnsProxyModel( model \
);  columnsProxy->setSortRole( FeedItemModel::SortRole );
-    columnsProxy->setSourceModel( m_proxy );
+    columnsProxy->setSourceModel( proxy2 );
 
     columnsProxy->setColumnEnabled( FeedItemModel::ItemTitleColumn );
     columnsProxy->setColumnEnabled( FeedItemModel::FeedTitleColumn );
@@ -158,7 +156,6 @@ void ArticleListView::setItemModel( QAbstractItemModel* model )
 
     setModel( columnsProxy );
     header()->setContextMenuPolicy( Qt::CustomContextMenu );
-#endif
 }
 
 void ArticleListView::showHeaderMenu(const QPoint& pos)
diff --git a/akregator/src/createfeedcommand.cpp \
b/akregator/src/createfeedcommand.cpp index 88a891e..8cef42d 100644
--- a/akregator/src/createfeedcommand.cpp
+++ b/akregator/src/createfeedcommand.cpp
@@ -35,9 +35,6 @@
 #include <Akonadi/Item>
 
 #include <krss/feedcollection.h>
-#include <krss/ui/feedlistview.h>
-#include <krss/feedlist.h>
-#include <krss/netresource.h>
 #include <krss/item.h>
 
 #include <KDebug>
@@ -63,22 +60,21 @@ class CreateFeedCommand::Private
 {
     CreateFeedCommand* const q;
 public:
-    explicit Private( CreateFeedCommand* qq );
+    explicit Private( Akonadi::Session* session, CreateFeedCommand* qq );
 
     void doCreate();
     void creationDone( KJob* );
     void modificationDone( KJob* );
 
-    QPointer<FeedListView> m_feedListView;
+    Akonadi::Session* m_session;
     QString m_url;
-    weak_ptr<FeedList> m_feedList;
     bool m_autoexec;
     Akonadi::Collection m_parentCollection;
 };
 
-CreateFeedCommand::Private::Private( CreateFeedCommand* qq )
+CreateFeedCommand::Private::Private( Akonadi::Session* session, CreateFeedCommand* \
qq )  : q( qq ),
-    m_feedListView(),
+    m_session( session ),
     m_autoexec( false )
 {
 
@@ -178,12 +174,7 @@ void CreateFeedCommand::Private::creationDone( KJob* job )
         KMessageBox::error( q->parentWidget(), i18n("Could not add feed: %1", \
job->errorString()),  i18n("Feed Creation Failed") );
 
-    if ( m_feedList.expired() ) {
-        guard.emitResult();
-        return;
-    }
-
-    //const Akonadi::CollectionCreateJob* const cjob = qobject_cast<const \
Akonadi::CollectionCreateJob*>( job ); +    guard.emitResult();
 }
 
 void CreateFeedCommand::Private::modificationDone( KJob* j )
@@ -194,7 +185,7 @@ void CreateFeedCommand::Private::modificationDone( KJob* j )
     guard.emitResult();
 }
 
-CreateFeedCommand::CreateFeedCommand( QObject* parent ) : Command( parent ), d( new \
Private( this ) ) +CreateFeedCommand::CreateFeedCommand( Akonadi::Session* session, \
QObject* parent ) : Command( parent ), d( new Private( session, this ) )  {
 
 }
@@ -204,22 +195,12 @@ CreateFeedCommand::~CreateFeedCommand()
     delete d;
 }
 
-void CreateFeedCommand::setFeedListView( FeedListView* view )
-{
-    d->m_feedListView = view;
-}
-
 
 void CreateFeedCommand::setUrl( const QString& url )
 {
     d->m_url = url;
 }
 
-void CreateFeedCommand::setFeedList( const weak_ptr<FeedList>& feedList )
-{
-    d->m_feedList = feedList;
-}
-
 void CreateFeedCommand::setAutoExecute( bool autoexec )
 {
     d->m_autoexec = autoexec;
diff --git a/akregator/src/createfeedcommand.h b/akregator/src/createfeedcommand.h
index 3261148..ba59c01 100644
--- a/akregator/src/createfeedcommand.h
+++ b/akregator/src/createfeedcommand.h
@@ -31,14 +31,9 @@ namespace boost {
     template <typename T> class weak_ptr;
 }
 
-namespace KRss {
-    class FeedListView;
-    class FeedList;
-    class NetResource;
-}
-
 namespace Akonadi {
     class Collection;
+    class Session;
 }
 
 namespace Akregator {
@@ -51,12 +46,10 @@ class CreateFeedCommand : public Command
 {
     Q_OBJECT
 public:
-    explicit CreateFeedCommand( QObject* parent = 0 );
+    explicit CreateFeedCommand( Akonadi::Session* session, QObject* parent = 0 );
     ~CreateFeedCommand();
 
-    void setFeedListView( KRss::FeedListView* view );
     void setUrl( const QString& url );
-    void setFeedList( const boost::weak_ptr<KRss::FeedList>& feedList );
     void setAutoExecute( bool autoexec );
     void setParentCollection( const Akonadi::Collection& collection );
 
diff --git a/akregator/src/mainwidget.cpp b/akregator/src/mainwidget.cpp
index b722bce..84ad824 100644
--- a/akregator/src/mainwidget.cpp
+++ b/akregator/src/mainwidget.cpp
@@ -56,18 +56,13 @@
 #include <Akonadi/ItemModifyJob>
 #include <Akonadi/Collection>
 #include <Akonadi/CollectionDeleteJob>
+#include <Akonadi/Session>
 
-#include <krss/feedlist.h>
-#include <krss/feedlistmodel.h>
+#include <krss/feedcollection.h>
 #include <krss/item.h>
-#include <krss/itemjobs.h>
-#include <krss/netresource.h>
-#include <krss/resourcemanager.h>
-#include <krss/tagprovider.h>
 #include <krss/resourcemanager.h>
 #include <krss/treenode.h>
 #include <krss/treenodevisitor.h>
-#include <krss/netfeed.h>
 #include <krss/tagjobs.h>
 #include <krss/feedjobs.h>
 
@@ -157,12 +152,14 @@ Akregator::MainWidget::MainWidget( Part *part, QWidget *parent, \
ActionManagerImp  m_horizontalSplitter->setOpaqueResize(true);
     lt->addWidget(m_horizontalSplitter);
 
+#ifdef KRSS_PORT_DISABLED
     const QString defaultResourceId = Settings::activeAkonadiResource();
     const shared_ptr<const KRss::NetResource> resource = \
KRss::ResourceManager::self()->resource( defaultResourceId );  connect( \
resource.get(), SIGNAL( fetchQueueStarted(QString) ),  this, SLOT( \
slotFetchQueueStarted() ) );  connect( resource.get(), SIGNAL( \
fetchQueueFinished(QString) ),  this, SLOT( slotFetchQueueFinished() ) );
+#endif
 
     m_feedListView = new KRss::FeedListView( m_horizontalSplitter );
     const KConfigGroup group( Settings::self()->config(), "General" );
@@ -221,7 +218,9 @@ Akregator::MainWidget::MainWidget( Part *part, QWidget *parent, \
ActionManagerImp  
     m_articleListView = new ArticleListView( m_articleSplitter );
 
-    m_selectionController = new SelectionController( this );
+    m_session = new Akonadi::Session( QByteArray( "Akregator-" ) + \
QByteArray::number( qrand() ) ); +
+    m_selectionController = new SelectionController( m_session, this );
     m_selectionController->setArticleLister( m_articleListView );
     m_selectionController->setFeedSelector( m_feedListView );
 
@@ -593,23 +592,21 @@ void Akregator::MainWidget::slotFeedAdd()
 
 void Akregator::MainWidget::addFeed(const QString& url, bool autoExec)
 {
-    std::auto_ptr<CreateFeedCommand> cmd( new CreateFeedCommand( this ) );
+    std::auto_ptr<CreateFeedCommand> cmd( new CreateFeedCommand( m_session, this ) \
);  cmd->setAutoExecute( autoExec );
     cmd->setUrl( url );
     cmd->setParentCollection( m_selectionController->selectedCollection() );
     // FIXME: keep a shared pointer to the default resource in MainWidget
-    const shared_ptr<KRss::NetResource> resource = \
                KRss::ResourceManager::self()->resource(
-                                                                \
                Settings::activeAkonadiResource() );
-    cmd->setFeedListView( m_feedListView );
-    cmd->setFeedList( weak_ptr<KRss::FeedList>( m_feedList ) );
     d->setUpAndStart( cmd.release() );
 }
 
 void Akregator::MainWidget::slotTagAdd()
 {
+#ifdef KRSS_PORT_DISABLED
     std::auto_ptr<CreateTagCommand> cmd( new CreateTagCommand( m_tagProvider, this ) \
);  cmd->setFeedListView( m_feedListView );
     d->setUpAndStart( cmd.release() );
+#endif
 }
 
 void Akregator::MainWidget::slotFeedRemove()
@@ -630,7 +627,7 @@ void Akregator::MainWidget::slotFeedRemove()
                                      KStandardGuiItem::cancel() ) == KMessageBox::No \
)  return;
 
-    Akonadi::CollectionDeleteJob* job = new Akonadi::CollectionDeleteJob( c );
+    Akonadi::CollectionDeleteJob* job = new Akonadi::CollectionDeleteJob( c, \
m_session );  job->start();
 }
 
@@ -673,9 +670,11 @@ namespace {
 
 void Akregator::MainWidget::slotFeedRemoveTag()
 {
+#if 0
     const shared_ptr<KRss::TreeNode> treeNode = \
m_selectionController->selectedSubscription();  RemoveTagFromFeedVisitor v( \
m_feedList );  treeNode->accept( &v );
+#endif
 }
 
 void Akregator::MainWidget::slotNextUnreadArticle()
@@ -814,10 +813,9 @@ void Akregator::MainWidget::slotItemSelected( const KRss::Item& \
item )  {
         KRss::Item modifiedItem = item;
         modifiedItem.setStatus( item.status() & ~KRss::Item::Unread );
-        Akonadi::ItemModifyJob* job = new Akonadi::ItemModifyJob( \
modifiedItem.akonadiItem() ); +        Akonadi::ItemModifyJob* job = new \
Akonadi::ItemModifyJob( modifiedItem.akonadiItem(), m_session ); +        connect( \
job, SIGNAL(finished(KJob*)), this, SLOT(slotJobFinished(KJob*)) );  \
                job->setIgnorePayload( true );
-        //PENDING(frank) connect to finished signal and report errors
-
         job->start();
     }
 }
@@ -851,27 +849,12 @@ void Akregator::MainWidget::slotMouseButtonPressed(int button, \
const KUrl& url)  
 void Akregator::MainWidget::slotOpenHomepage()
 {
-    const shared_ptr<const KRss::TreeNode> treeNode = \
                m_selectionController->selectedSubscription();
-    if ( !treeNode )
-        return;
-    else if ( treeNode->tier() == KRss::TreeNode::TagTier )
-        return;
-
-    const shared_ptr<const KRss::FeedNode> feedNode = dynamic_pointer_cast<const \
                KRss::FeedNode,
-                                                                           const \
                KRss::TreeNode>( treeNode );
-    assert( feedNode );
-    const shared_ptr<const KRss::Feed> feed = m_feedList->constFeedById( \
                feedNode->feedId() );
-    assert( feed );
-
-    // check whether it's a virtual search feed
-    if ( feed->isVirtual() )
+    const Akonadi::Collection c = m_selectionController->selectedCollection();
+    if ( !c.isValid() )
         return;
+    const KRss::FeedCollection fc( c );
 
-    const shared_ptr<const KRss::NetFeed> netFeed = dynamic_pointer_cast<const \
                KRss::NetFeed,
-                                                                         const \
                KRss::Feed>( feed );
-    assert( netFeed );
-
-    KUrl url( netFeed->htmlUrl() );
+    KUrl url( fc.htmlUrl() );
     if (url.isValid()) {
         OpenUrlRequest req( url );
         req.setOptions(OpenUrlRequest::ExternalBrowser);
@@ -986,14 +969,13 @@ void Akregator::MainWidget::slotArticleDelete()
                                              "Disable delete article confirmation" ) \
!= KMessageBox::Continue )  return;
 
-    Q_FOREACH( const KRss::Item& i, items )
+    Q_FOREACH( const KRss::Item& i, m_selectionController->selectedItems() )
     {
         KRss::Item modifiedItem = i;
-        modifiedItem.setStatus( i.status() | KRss::Item::Deleted );
-        KRss::ItemModifyJob * const job = new KRss::ItemModifyJob();
-        job->setItem( modifiedItem );
+        modifiedItem.setStatus( ( i.status() | KRss::Item::Deleted ) & \
~KRss::Item::Unread ); +        Akonadi::ItemModifyJob* job = new \
Akonadi::ItemModifyJob( modifiedItem.akonadiItem(), m_session ); +        connect( \
job, SIGNAL(finished(KJob*)), this, SLOT(slotJobFinished(KJob*)) );  \
                job->setIgnorePayload( true );
-
         job->start();
     }
 
@@ -1023,17 +1005,16 @@ void Akregator::MainWidget::slotArticleToggleKeepFlag( bool )
         else
             modifiedItem.setStatus( i.status() | KRss::Item::Important );
 
-        KRss::ItemModifyJob * const job = new KRss::ItemModifyJob();
-        job->setItem( modifiedItem );
+        Akonadi::ItemModifyJob* job = new Akonadi::ItemModifyJob( \
modifiedItem.akonadiItem(), m_session ); +        connect( job, \
SIGNAL(finished(KJob*)), this, SLOT(slotJobFinished(KJob*)) );  \
                job->setIgnorePayload( true );
-        //PENDING(frank) connect to finished signal and report errors
         job->start();
     }
 }
 
 namespace {
 
-static void setSelectedArticleStatus( const Akregator::AbstractSelectionController* \
controller, Akregator::ArticleStatus status ) +static void setSelectedArticleStatus( \
Akonadi::Session* session, QObject* rec, const \
Akregator::AbstractSelectionController* controller, Akregator::ArticleStatus status ) \
{  const QList<KRss::Item> items = controller->selectedItems();
 
@@ -1051,9 +1032,9 @@ static void setSelectedArticleStatus( const \
Akregator::AbstractSelectionControll  modifiedItem.setStatus( i.status() | \
KRss::Item::Unread );  break;
         }
-        Akonadi::ItemModifyJob* job = new Akonadi::ItemModifyJob( \
modifiedItem.akonadiItem() ); +        Akonadi::ItemModifyJob* job = new \
Akonadi::ItemModifyJob( modifiedItem.akonadiItem(), session ); +        rec->connect( \
job, SIGNAL(finished(KJob*)), rec, SLOT(slotJobFinished(KJob*)) );  \
                job->setIgnorePayload( true );
-        //PENDING(frank) connect to finished signal and report errors
         job->start();
     }
 }
@@ -1062,7 +1043,7 @@ static void setSelectedArticleStatus( const \
Akregator::AbstractSelectionControll  
 void Akregator::MainWidget::slotSetSelectedArticleRead()
 {
-    ::setSelectedArticleStatus( m_selectionController, Akregator::Read );
+    ::setSelectedArticleStatus( m_session, this, m_selectionController, \
Akregator::Read );  }
 
 void Akregator::MainWidget::slotTextToSpeechRequest()
@@ -1092,7 +1073,7 @@ void Akregator::MainWidget::slotTextToSpeechRequest()
 
 void Akregator::MainWidget::slotSetSelectedArticleUnread()
 {
-    ::setSelectedArticleStatus( m_selectionController, Akregator::Unread );
+    ::setSelectedArticleStatus( m_session, this, m_selectionController, \
Akregator::Unread );  }
 
 void Akregator::MainWidget::slotSetCurrentArticleReadDelayed()
@@ -1103,7 +1084,8 @@ void Akregator::MainWidget::slotSetCurrentArticleReadDelayed()
         return;
 
     item.setStatus( item.status() & ~KRss::Item::Unread );
-    Akonadi::ItemModifyJob* job = new Akonadi::ItemModifyJob( item.akonadiItem() );
+    Akonadi::ItemModifyJob* job = new Akonadi::ItemModifyJob( item.akonadiItem(), \
m_session ); +    connect( job, SIGNAL(finished(KJob*)), this, \
SLOT(slotJobFinished(KJob*)) );  job->setIgnorePayload( true );
     job->start();
 }
diff --git a/akregator/src/mainwidget.h b/akregator/src/mainwidget.h
index 0af02b1..eb348ee 100644
--- a/akregator/src/mainwidget.h
+++ b/akregator/src/mainwidget.h
@@ -53,6 +53,10 @@ namespace KRss {
     class Item;
 }
 
+namespace Akonadi {
+    class Session;
+}
+
 namespace Akregator {
 
 class AbstractSelectionController;
@@ -237,6 +241,7 @@ class AKREGATORPART_EXPORT MainWidget : public QWidget
 
         KRss::FeedListView* m_feedListView;
         ArticleListView* m_articleListView;
+        Akonadi::Session* m_session;
 
         ArticleViewer *m_articleViewer;
         TabWidget* m_tabWidget;
diff --git a/akregator/src/selectioncontroller.cpp \
b/akregator/src/selectioncontroller.cpp index 8c4f6b3..8426579 100644
--- a/akregator/src/selectioncontroller.cpp
+++ b/akregator/src/selectioncontroller.cpp
@@ -27,11 +27,8 @@
 #include "progressmanager.h"
 
 #include <krss/feeditemmodel.h>
-#include <krss/feedlist.h>
-#include <krss/itemjobs.h>
 #include <krss/itemlisting.h>
 #include <krss/itemlistjob.h>
-#include <krss/itemmodel.h>
 #include <krss/tagprovider.h>
 #include <krss/treenode.h>
 #include <krss/treenodevisitor.h>
@@ -62,7 +59,7 @@ using namespace KRss;
 
 static KRss::Item itemForIndex( const QModelIndex& index )
 {
-    return KRss::Item( index.data( KRss::FeedItemModel::ItemRole \
).value<Akonadi::Item>() ); +    return KRss::Item( index.data( \
Akonadi::EntityTreeModel::ItemRole ).value<Akonadi::Item>() );  }
 
 static QList<KRss::Item> itemsForIndexes( const QModelIndexList& indexes )
@@ -81,30 +78,29 @@ static shared_ptr<KRss::TreeNode> subscriptionForIndex( const \
QModelIndex& index  return shared_ptr<KRss::TreeNode>();
 }
 
-Akregator::SelectionController::SelectionController( QObject* parent )
+Akregator::SelectionController::SelectionController( Akonadi::Session* session, \
QObject* parent )  : AbstractSelectionController( parent ),
     m_feedSelector(),
     m_articleLister( 0 ),
     m_singleDisplay( 0 ),
     m_folderExpansionHandler( 0 ),
     m_itemModel( 0 ),
-    m_selectedSubscription()
+    m_selectedSubscription(),
+    m_session( session )
 {
     Akonadi::ItemFetchScope iscope;
     iscope.fetchFullPayload( true );
     iscope.fetchAttribute<Akonadi::EntityDisplayAttribute>();
-
     Akonadi::CollectionFetchScope cscope;
     cscope.setIncludeStatistics( true );
-    cscope.setContentMimeTypes( QStringList() << \
                QLatin1String("application/rss+xml") );
-    Akonadi::Session* session = new Akonadi::Session( QByteArray( "Akregator-" ) + \
                QByteArray::number( qrand() ) );
-    Akonadi::ChangeRecorder* recorder = new Akonadi::ChangeRecorder;
+    cscope.setContentMimeTypes( QStringList() << KRss::Item::mimeType() );
+    Akonadi::ChangeRecorder* recorder = new Akonadi::ChangeRecorder( this );
     recorder->setSession( session );
     recorder->fetchCollection( true );
     recorder->setCollectionFetchScope( cscope );
     recorder->setItemFetchScope( iscope );
     recorder->setCollectionMonitored( Akonadi::Collection::root() );
-    recorder->setMimeTypeMonitored( QLatin1String( "application/rss+xml" ) );
+    recorder->setMimeTypeMonitored( KRss::Item::mimeType() );
     m_itemModel = new FeedItemModel( recorder, this );
 }
 
@@ -145,6 +141,7 @@ void Akregator::SelectionController::init() {
 
     KSelectionProxyModel* selectionProxy = new KSelectionProxyModel( \
                m_feedSelector->selectionModel() );
     selectionProxy->setFilterBehavior( \
KSelectionProxyModel::ChildrenOfExactSelection ); +
     selectionProxy->setSourceModel( m_itemModel );
 
     Akonadi::EntityMimeTypeFilterModel* filterProxy2 = new \
Akonadi::EntityMimeTypeFilterModel; @@ -288,7 +285,7 @@ void \
Akregator::SelectionController::itemSelectionChanged()  Akonadi::ItemFetchScope \
scope;  scope.fetchFullPayload();
     scope.fetchAttribute<Akonadi::EntityDisplayAttribute>();
-    Akonadi::ItemFetchJob* job = new Akonadi::ItemFetchJob( item );
+    Akonadi::ItemFetchJob* job = new Akonadi::ItemFetchJob( item, m_session );
     job->setFetchScope( scope );
     connect( job, SIGNAL(finished(KJob*)), this, SLOT(fullItemFetched(KJob*)) );
     job->start();
diff --git a/akregator/src/selectioncontroller.h \
b/akregator/src/selectioncontroller.h index 508e8bf..d4b5632 100644
--- a/akregator/src/selectioncontroller.h
+++ b/akregator/src/selectioncontroller.h
@@ -40,6 +40,7 @@ class KJob;
 namespace Akonadi {
     class Collection;
     class Item;
+    class Session;
 }
 
 namespace KRss {
@@ -57,7 +58,7 @@ class SelectionController : public AbstractSelectionController
 
 public:
 
-    explicit SelectionController( QObject* parent = 0 );
+    explicit SelectionController( Akonadi::Session* session, QObject* parent = 0 );
 
     //impl
     void setFeedSelector( QAbstractItemView* feedSelector ) ;
@@ -112,6 +113,7 @@ private:
     KRss::FeedItemModel* m_itemModel;
     boost::shared_ptr<KRss::TreeNode> m_selectedSubscription;
     QMap<boost::weak_ptr<const KRss::TreeNode>, QPoint> m_scrollBarPositions;
+    Akonadi::Session* m_session;
 };
 
 } // namespace Akregator
diff --git a/akregator/src/setupakonadicommand.cpp \
b/akregator/src/setupakonadicommand.cpp index f584525..fd3d029 100644
--- a/akregator/src/setupakonadicommand.cpp
+++ b/akregator/src/setupakonadicommand.cpp
@@ -28,14 +28,20 @@
 
 #include <krss/resourcemanager.h>
 
+#include "krss/subscriptionlabelscollectionattribute.h"
+#include "krss/feedpropertiescollectionattribute.h"
+#include "krss/virtualfeedpropertiesattribute.h"
+
 #include <Akonadi/AgentInstance>
 #include <Akonadi/AgentInstanceCreateJob>
 #include <Akonadi/AgentInstanceWidget>
 #include <Akonadi/AgentManager>
 #include <Akonadi/AgentType>
+#include <Akonadi/AttributeFactory>
 #include <Akonadi/Control>
 #include <Akonadi/AgentFilterProxyModel>
 
+
 #include <KDialog>
 #include <KLocalizedString>
 #include <KMessageBox>
@@ -66,7 +72,11 @@ public:
 SetUpAkonadiCommand::SetUpAkonadiCommand( QObject* parent ) : d( new Private( this ) \
) {}  
 void SetUpAkonadiCommand::doStart() {
-    QMetaObject::invokeMethod( this, "startSetup", Qt::QueuedConnection );
+    Akonadi::AttributeFactory::registerAttribute<KRss::SubscriptionLabelsCollectionAttribute>();
 +    Akonadi::AttributeFactory::registerAttribute<KRss::FeedPropertiesCollectionAttribute>();
 +    Akonadi::AttributeFactory::registerAttribute<KRss::VirtualFeedPropertiesAttribute>();
 +    emitResult();
+    //QMetaObject::invokeMethod( this, "startSetup", Qt::QueuedConnection );
 }
 
 QWidget* SetUpAkonadiCommand::mainWidget() const {
diff --git a/krss/krss/feeditemmodel.cpp b/krss/krss/feeditemmodel.cpp
index d417592..fe0eab7 100644
--- a/krss/krss/feeditemmodel.cpp
+++ b/krss/krss/feeditemmodel.cpp
@@ -56,8 +56,7 @@ QVariant FeedItemModel::entityData( const Akonadi::Item \
&akonadiItem, int column  return item.dateUpdated().toTime_t();
 
     if ( role == IsDeletedRole )
-        return false;
-
+        return KRss::RssItem::isDeleted( akonadiItem );
 
     if ( role == Qt::DisplayRole || role == SortRole ) {
         switch ( column ) {
@@ -92,32 +91,27 @@ QVariant FeedItemModel::entityData( const Akonadi::Item \
&akonadiItem, int column  }
     }
 
-    if ( role == FeedItemModel::ItemRole ) {
-        QVariant var;
-        var.setValue( akonadiItem );
-        return var;
+    switch ( role ) {
+        case IsImportantRole:
+            return RssItem::isImportant( akonadiItem );
+        case IsUnreadRole:
+            return RssItem::isUnread( akonadiItem );
+        case IsReadRole:
+            return RssItem::isRead( akonadiItem );
+        case IsDeletedRole:
+            return RssItem::isDeleted( akonadiItem );
+        case LinkRole:
+            return item.link();
+    default:
+        break;
     }
-
-    if ( role == IsImportantRole )
-        return RssItem::isImportant( akonadiItem );
-
-    if ( role == IsUnreadRole )
-        return RssItem::isUnread( akonadiItem );
-
-    if ( role == IsReadRole )
-        return RssItem::isRead( akonadiItem );
-
-    if ( role == IsDeletedRole )
-        return RssItem::isDeleted( akonadiItem );
-
-    if ( role == LinkRole )
-        return item.link();
-
+#if 0
     //PENDING(frank) TODO: use configurable colors
     if ( role == Qt::ForegroundRole ) {
         if ( RssItem::isUnread( akonadiItem ) )
             return Qt::blue;
     }
+#endif
 
     if ( role == Qt::DecorationRole && column == ItemTitleColumn && \
RssItem::isImportant( akonadiItem ) )  return d->importantIcon;
@@ -128,6 +122,8 @@ QVariant FeedItemModel::entityData( const Akonadi::Item \
&akonadiItem, int column  QVariant FeedItemModel::entityData( const Collection \
&collection, int column, int role ) const {  if ( role == Qt::DisplayRole || role == \
SortRole ) {  switch ( column ) {
+        case IsTagRole:
+            return false;
         case FeedTitleColumn:
         {
             const QString title = FeedCollection( collection ).title();
diff --git a/krss/krss/feeditemmodel.h b/krss/krss/feeditemmodel.h
index c2a3b78..f03bfc4 100644
--- a/krss/krss/feeditemmodel.h
+++ b/krss/krss/feeditemmodel.h
@@ -45,21 +45,19 @@ public:
 
     enum FeedColumn {
         FeedTitleColumn=0,
-#if 0
-        UnreadCountColumn,
-        TotalCountColumn,
-#endif
-        FeedColumnCount
+        UnreadCountColumn=1,
+        TotalCountColumn=2,
+        FeedColumnCount=1 //PENDING(frank) multiple columns crash \
KSelectionProxyModel, review  };
 
     enum ItemRoles {
-        ItemRole=EntityTreeModel::UserRole,
-        SortRole,
+        SortRole=EntityTreeModel::UserRole,
         IsUnreadRole,
         IsReadRole,
         IsDeletedRole, //PENDING(frank) transitional Akregator compat, review
         IsImportantRole, //PENDING(frank) transitional Akregator compat, review
-        LinkRole  //PENDING(frank) transitional Akregator compat, review
+        LinkRole, //PENDING(frank) transitional Akregator compat, review
+        IsTagRole //PENDING(frank) old krss transitional
     };
 
 public:
diff --git a/krss/krss/feedpropertiescollectionattribute.cpp \
b/krss/krss/feedpropertiescollectionattribute.cpp index 934fca7..c96eb69 100644
--- a/krss/krss/feedpropertiescollectionattribute.cpp
+++ b/krss/krss/feedpropertiescollectionattribute.cpp
@@ -49,12 +49,12 @@ void FeedPropertiesCollectionAttribute::deserialize( const \
QByteArray &data )  
 QString FeedPropertiesCollectionAttribute::name() const
 {
-    return m_properties.value( QString::fromLatin1("Name" ) );
+    return m_properties.value( QLatin1String("Name" ) );
 }
 
 void FeedPropertiesCollectionAttribute::setName( const QString &name )
 {
-    m_properties.insert( QString::fromLatin1("Name" ), name );
+    m_properties.insert( QLatin1String("Name" ), name );
 }
 
 bool FeedPropertiesCollectionAttribute::preferItemLinkForDisplay() const
@@ -64,45 +64,45 @@ bool \
FeedPropertiesCollectionAttribute::preferItemLinkForDisplay() const  
 void FeedPropertiesCollectionAttribute::setPreferItemLinkForDisplay( bool b )
 {
-    m_properties.insert( QLatin1String("PreferItemLinkForDisplay"), b ? \
QString::fromLatin1("true") : QString() ); +    m_properties.insert( \
QLatin1String("PreferItemLinkForDisplay"), b ? QLatin1String("true") : QString() );  \
}  
 QString FeedPropertiesCollectionAttribute::xmlUrl() const
 {
-    return m_properties.value( QString::fromLatin1("XmlUrl" ) );
+    return m_properties.value( QLatin1String("XmlUrl" ) );
 }
 
 void FeedPropertiesCollectionAttribute::setXmlUrl( const QString &xmlUrl )
 {
-    m_properties.insert( QString::fromLatin1("XmlUrl" ), xmlUrl );
+    m_properties.insert( QLatin1String("XmlUrl" ), xmlUrl );
 }
 
 QString FeedPropertiesCollectionAttribute::htmlUrl() const
 {
-    return m_properties.value( QString::fromLatin1("HtmlUrl" ) );
+    return m_properties.value( QLatin1String("HtmlUrl" ) );
 }
 
 void FeedPropertiesCollectionAttribute::setHtmlUrl( const QString &htmlUrl )
 {
-    m_properties.insert( QString::fromLatin1("HtmlUrl" ), htmlUrl );
+    m_properties.insert( QLatin1String("HtmlUrl" ), htmlUrl );
 }
 
 QString FeedPropertiesCollectionAttribute::feedType() const
 {
-    return m_properties.value( QString::fromLatin1("FeedType" ) );
+    return m_properties.value( QLatin1String("FeedType" ) );
 }
 
 void FeedPropertiesCollectionAttribute::setFeedType( const QString &feedType )
 {
-    m_properties.insert( QString::fromLatin1("FeedType" ), feedType );
+    m_properties.insert( QLatin1String("FeedType" ), feedType );
 }
 
 QString FeedPropertiesCollectionAttribute::description() const
 {
-    return m_properties.value( QString::fromLatin1("Description" ) );
+    return m_properties.value( QLatin1String("Description" ) );
 }
 
 void FeedPropertiesCollectionAttribute::setDescription( const QString &description )
 {
-    m_properties.insert( QString::fromLatin1("Description" ), description );
+    m_properties.insert( QLatin1String("Description" ), description );
 }
diff --git a/krss/krss/feedpropertiescollectionattribute.h \
b/krss/krss/feedpropertiescollectionattribute.h index 111258e..cb776b5 100644
--- a/krss/krss/feedpropertiescollectionattribute.h
+++ b/krss/krss/feedpropertiescollectionattribute.h
@@ -18,6 +18,8 @@
 #ifndef KRSS_FEEDPROPERTIESCOLLECTIONATTRIBUTE_H
 #define KRSS_FEEDPROPERTIESCOLLECTIONATTRIBUTE_H
 
+#include "krss_export.h"
+
 #include <akonadi/attribute.h>
 
 #include <QtCore/QString>
@@ -25,7 +27,7 @@
 
 namespace KRss {
 
-class FeedPropertiesCollectionAttribute : public Akonadi::Attribute
+class KRSS_EXPORT FeedPropertiesCollectionAttribute : public Akonadi::Attribute
 {
 public:
 
diff --git a/krss/krss/resourcemanager.cpp b/krss/krss/resourcemanager.cpp
index d1a5b19..5cdd21d 100644
--- a/krss/krss/resourcemanager.cpp
+++ b/krss/krss/resourcemanager.cpp
@@ -51,6 +51,7 @@ public:
 
 ResourceManager* ResourceManager::self()
 {
+    Q_ASSERT( false );
     static ResourceManager s_instance;
     return &s_instance;
 }
diff --git a/krss/krss/subscriptionlabelscollectionattribute.h \
b/krss/krss/subscriptionlabelscollectionattribute.h index d909271..ced060a 100644
--- a/krss/krss/subscriptionlabelscollectionattribute.h
+++ b/krss/krss/subscriptionlabelscollectionattribute.h
@@ -18,13 +18,14 @@
 #ifndef KRSS_SUBSCRIPTIONLABELSCOLLECTIONATTRIBUTE_H
 #define KRSS_SUBSCRIPTIONLABELSCOLLECTIONATTRIBUTE_H
 
+#include "krss_export.h"
 #include <akonadi/attribute.h>
 
 #include <QtCore/QStringList>
 
 namespace KRss {
 
-class SubscriptionLabelsCollectionAttribute : public Akonadi::Attribute
+class KRSS_EXPORT SubscriptionLabelsCollectionAttribute : public Akonadi::Attribute
 {
 public:
 
diff --git a/krss/krss/ui/feedlistview.cpp b/krss/krss/ui/feedlistview.cpp
index 521a5c8..79ab399 100644
--- a/krss/krss/ui/feedlistview.cpp
+++ b/krss/krss/ui/feedlistview.cpp
@@ -18,8 +18,7 @@
 
 #include "feedlistview.h"
 #include "feedlistdelegate.h"
-#include "krss/feedlistmodel.h"
-#include "krss/treenode.h"
+#include "krss/feeditemmodel.h"
 
 #include <KConfigGroup>
 #include <KLocalizedString>
@@ -57,7 +56,7 @@ static QModelIndex prevIndex( const QModelIndex&idx )
 static QModelIndex prevFeedIndex( const QModelIndex& idx, bool allowPassed = false )
 {
     QModelIndex prev = allowPassed ? idx : prevIndex( idx );
-    while ( prev.isValid() && prev.data( FeedListModel::IsTagRole ).toBool() ) {
+    while ( prev.isValid() && prev.data( FeedItemModel::IsTagRole ).toBool() ) {
         prev = prevIndex( prev );
     }
     return prev;
@@ -66,8 +65,8 @@ static QModelIndex prevFeedIndex( const QModelIndex& idx, bool \
allowPassed = fal  static QModelIndex prevUnreadFeedIndex( const QModelIndex& idx, \
bool allowPassed = false )  {
     QModelIndex prev = allowPassed ? idx : prevIndex( idx );
-    while ( prev.isValid() && ( prev.data( FeedListModel::IsTagRole ).toBool() ||
-            prev.sibling( prev.row(), FeedListModel::UnreadCountColumn \
).data().toInt() == 0 ) ) { +    while ( prev.isValid() && ( prev.data( \
FeedItemModel::IsTagRole ).toBool() || +            prev.sibling( prev.row(), \
FeedItemModel::UnreadCountColumn ).data().toInt() == 0 ) ) {  prev = prevIndex( prev \
);  }
     return prev;
@@ -107,7 +106,7 @@ static QModelIndex nextIndex( const QModelIndex& idx )
 static QModelIndex nextFeedIndex( const QModelIndex& idx )
 {
     QModelIndex next = nextIndex( idx );
-    while ( next.isValid() && next.data( FeedListModel::IsTagRole ).toBool() ) {
+    while ( next.isValid() && next.data( FeedItemModel::IsTagRole ).toBool() ) {
         next = nextIndex( next );
     }
     return next;
@@ -116,8 +115,8 @@ static QModelIndex nextFeedIndex( const QModelIndex& idx )
 static QModelIndex nextUnreadFeedIndex( const QModelIndex& idx )
 {
     QModelIndex next = nextIndex( idx );
-    while ( next.isValid() && ( next.data( FeedListModel::IsTagRole ).toBool() ||
-            next.sibling( next.row(), FeedListModel::UnreadCountColumn \
).data().toInt() == 0 ) ) { +    while ( next.isValid() && ( next.data( \
FeedItemModel::IsTagRole ).toBool() || +            next.sibling( next.row(), \
FeedItemModel::UnreadCountColumn ).data().toInt() == 0 ) ) {  next = nextIndex( next \
);  }
     return next;
@@ -151,12 +150,16 @@ FeedListView::Private::Private( FeedListView* qq ) : q( qq )
 
 void FeedListView::Private::slotClicked( const QModelIndex &index )
 {
-    emit q->clicked( q->model()->data( index, FeedListModel::TreeNodeRole \
).value<shared_ptr<TreeNode> >() ); +#ifdef KRSS_PORT_REMOVED
+    emit q->clicked( q->model()->data( index, FeedItemModel::TreeNodeRole \
).value<shared_ptr<TreeNode> >() ); +#endif
 }
 
 void FeedListView::Private::slotActivated( const QModelIndex &index )
 {
-    emit q->clicked( q->model()->data( index, FeedListModel::TreeNodeRole \
).value<shared_ptr<TreeNode> >() ); +#ifdef KRSS_PORT_REMOVED
+    emit q->clicked( q->model()->data( index, FeedItemModel::TreeNodeRole \
).value<shared_ptr<TreeNode> >() ); +#endif
 }
 
 void FeedListView::Private::showHeaderMenu( const QPoint& pos )


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

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