[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