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

List:       kde-commits
Subject:    KDE/kdepim/akregator/src
From:       Frank Osterfeld <frank.osterfeld () kdemail ! net>
Date:       2009-12-05 19:45:56
Message-ID: 1260042356.489500.6046.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 1059084 by osterfeld:

merge from 4.3 branch
------------------------------------------------------------------------
r988358 | osterfeld | 2009-06-27 23:36:41 +0200 (Sat, 27 Jun 2009) | 3 lines

don't crash when passing feeds to add via cmd line option
BUG:193963

------------------------------------------------------------------------



 M  +23 -7     akregator_part.cpp  
 M  +13 -0     akregator_part.h  


--- trunk/KDE/kdepim/akregator/src/akregator_part.cpp #1059083:1059084
@@ -359,6 +359,8 @@
 }
 
 bool Part::openFile() {
+    if ( m_loadFeedListCommand || m_standardListLoaded )
+        return true;
     std::auto_ptr<LoadFeedListCommand> cmd( new LoadFeedListCommand( m_mainWidget ) );
     cmd->setParentWidget( m_mainWidget );
     cmd->setStorage( Kernel::self()->storage() );
@@ -366,7 +368,8 @@
     cmd->setDefaultFeedList( createDefaultFeedList() );
     connect( cmd.get(), SIGNAL(result(boost::shared_ptr<Akregator::FeedList>)),
              this, SLOT(feedListLoaded(boost::shared_ptr<Akregator::FeedList>)) );
-    cmd.release()->start();
+    m_loadFeedListCommand = cmd.release();
+    m_loadFeedListCommand->start();
     return true;
 }
 
@@ -381,16 +384,29 @@
 }
 
 void Part::feedListLoaded( const shared_ptr<FeedList>& list ) {
+    assert( !m_standardListLoaded );
     m_mainWidget->setFeedList( list );
     m_standardListLoaded = list != 0;
 
     if( Settings::markAllFeedsReadOnStartup() )
         m_mainWidget->slotMarkAllFeedsRead();
 
+    if ( m_standardListLoaded )
+        QTimer::singleShot( 0, this, SLOT(flushAddFeedRequests()) );
+
     if (Settings::fetchOnStartup())
         m_mainWidget->slotFetchAllFeeds();
 }
 
+void Part::flushAddFeedRequests() {
+    Q_FOREACH( const AddFeedRequest& i, m_requests ) {
+        Q_FOREACH ( const QString& j, i.urls )
+            m_mainWidget->addFeedToGroup( j, i.group );
+        NotificationManager::self()->slotNotifyFeeds( i.urls );
+    }
+    m_requests.clear();
+}
+
 void Part::slotSaveFeedList()
 {
     // don't save to the standard feed list, when it wasn't completely loaded before
@@ -523,12 +539,12 @@
 
 void Part::addFeedsToGroup(const QStringList& urls, const QString& group)
 {
-    for (QStringList::ConstIterator it = urls.begin(); it != urls.end(); ++it)
-    {
-        kDebug() <<"Akregator::Part::addFeedToGroup adding feed with URL" << *it <<" to group" << group;
-        m_mainWidget->addFeedToGroup(*it, group);
-    }
-    NotificationManager::self()->slotNotifyFeeds(urls);
+    AddFeedRequest req;
+    req.group = group;
+    req.urls = urls;
+    m_requests.append( req );
+    if ( m_standardListLoaded )
+        flushAddFeedRequests();
 }
 
 void Part::addFeed()
--- trunk/KDE/kdepim/akregator/src/akregator_part.h #1059083:1059084
@@ -26,6 +26,9 @@
 #ifndef AKREGATOR_PART_H
 #define AKREGATOR_PART_H
 
+#include <QPointer>
+#include <QVector>
+
 #include <kurl.h>
 #include <kparts/browserextension.h>
 #include <kparts/part.h>
@@ -48,6 +51,7 @@
 class ActionManagerImpl;
 class Feed;
 class FeedList;
+class LoadFeedListCommand;
 class MainWidget;
 class Part;
 class TrayIcon;
@@ -164,6 +168,8 @@
 
         void feedListLoaded( const boost::shared_ptr<Akregator::FeedList>& list );
 
+        void flushAddFeedRequests();
+
     private: // methods
 
         /** fills the font settings with system fonts, if fonts are not set */
@@ -171,6 +177,7 @@
 
         bool writeToTextFile( const QString& data, const QString& fname ) const;
 
+
     private: // attributes
 
         class ApplyFiltersInterceptor;
@@ -188,6 +195,12 @@
         Backend::Storage* m_storage;
         ActionManagerImpl* m_actionManager;
         KCMultiDialog* m_dialog;
+        struct AddFeedRequest {
+            QStringList urls;
+            QString group;
+        };
+        QPointer<LoadFeedListCommand> m_loadFeedListCommand;
+        QVector<AddFeedRequest> m_requests;
 };
 
 } // namespace Akregator
[prev in list] [next in list] [prev in thread] [next in thread] 

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