FeedReader:

- Recalculate message count of the user notify when a feed with new items is deleted.
- Set deleted message to read and !new.
- Added test feed item in notify settings.

git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@6072 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
thunder2 2013-01-14 22:41:31 +00:00
parent 6f7c424b1f
commit ddc4a37a93
11 changed files with 78 additions and 2 deletions

View File

@ -20,6 +20,8 @@
****************************************************************/ ****************************************************************/
#include <QMutex> #include <QMutex>
#include <QDateTime>
#include <QBuffer>
#include "FeedReaderFeedNotify.h" #include "FeedReaderFeedNotify.h"
#include "FeedReaderNotify.h" #include "FeedReaderNotify.h"
@ -116,3 +118,24 @@ QWidget *FeedReaderFeedNotify::feedItem(FeedHolder *parent)
return new FeedReaderFeedItem(mFeedReader, mNotify, parent, feedInfo, msgInfo); return new FeedReaderFeedItem(mFeedReader, mNotify, parent, feedInfo, msgInfo);
} }
QWidget *FeedReaderFeedNotify::testFeedItem(FeedHolder *parent)
{
FeedInfo feedInfo;
feedInfo.name = tr("Test").toUtf8().constData();
QByteArray faviconData;
QBuffer buffer(&faviconData);
buffer.open(QIODevice::WriteOnly);
if (QPixmap(":/images/Feed.png").scaled(16, 16, Qt::IgnoreAspectRatio, Qt::SmoothTransformation).save(&buffer, "ICO")) {
feedInfo.icon = faviconData.toBase64().constData();
}
buffer.close();
FeedMsgInfo msgInfo;
msgInfo.title = tr("Test message").toUtf8().constData();
msgInfo.description = tr("This is a test message.").toUtf8().constData();
msgInfo.pubDate = QDateTime::currentDateTime().toTime_t();
return new FeedReaderFeedItem(mFeedReader, mNotify, parent, feedInfo, msgInfo);
}

View File

@ -31,6 +31,7 @@ class QMutex;
class FeedReaderFeedNotify : public FeedNotify class FeedReaderFeedNotify : public FeedNotify
{ {
Q_OBJECT Q_OBJECT
protected: protected:
class FeedItem class FeedItem
{ {
@ -50,6 +51,7 @@ public:
virtual bool notifyEnabled(); virtual bool notifyEnabled();
virtual void setNotifyEnabled(bool enabled); virtual void setNotifyEnabled(bool enabled);
virtual QWidget *feedItem(FeedHolder *parent); virtual QWidget *feedItem(FeedHolder *parent);
virtual QWidget *testFeedItem(FeedHolder *parent);
private slots: private slots:
void msgChanged(const QString &feedId, const QString &msgId, int type); void msgChanged(const QString &feedId, const QString &msgId, int type);

View File

@ -26,10 +26,12 @@
#include "gui/MainWindow.h" #include "gui/MainWindow.h"
#include "interface/rsFeedReader.h" #include "interface/rsFeedReader.h"
#include "retroshare/rsiface.h"
FeedReaderUserNotify::FeedReaderUserNotify(FeedReaderDialog *feedReaderDialog, RsFeedReader *feedReader, FeedReaderNotify *notify, QObject *parent) : FeedReaderUserNotify::FeedReaderUserNotify(FeedReaderDialog *feedReaderDialog, RsFeedReader *feedReader, FeedReaderNotify *notify, QObject *parent) :
UserNotify(parent), mFeedReaderDialog(feedReaderDialog), mFeedReader(feedReader), mNotify(notify) UserNotify(parent), mFeedReaderDialog(feedReaderDialog), mFeedReader(feedReader), mNotify(notify)
{ {
connect(mNotify, SIGNAL(feedChanged(QString,int)), this, SLOT(feedChanged(QString,int)), Qt::QueuedConnection);
connect(mNotify, SIGNAL(msgChanged(QString,QString,int)), this, SLOT(updateIcon()), Qt::QueuedConnection); connect(mNotify, SIGNAL(msgChanged(QString,QString,int)), this, SLOT(updateIcon()), Qt::QueuedConnection);
} }
@ -86,3 +88,10 @@ void FeedReaderUserNotify::iconClicked()
{ {
MainWindow::showWindow(mFeedReaderDialog); MainWindow::showWindow(mFeedReaderDialog);
} }
void FeedReaderUserNotify::feedChanged(const QString &/*feedId*/, int type)
{
if (type == NOTIFY_TYPE_DEL) {
updateIcon();
}
}

View File

@ -41,6 +41,9 @@ public:
virtual bool notifyBlink(); virtual bool notifyBlink();
virtual void setNotifyEnabled(bool enabled, bool combined, bool blink); virtual void setNotifyEnabled(bool enabled, bool combined, bool blink);
private slots:
void feedChanged(const QString &feedId, int type);
private: private:
virtual QIcon getIcon(); virtual QIcon getIcon();
virtual QIcon getMainIcon(bool hasNew); virtual QIcon getMainIcon(bool hasNew);

View File

@ -143,6 +143,7 @@ public:
pubDate = 0; pubDate = 0;
flag.isnew = false; flag.isnew = false;
flag.read = false; flag.read = false;
flag.deleted = false;
} }
std::string msgId; std::string msgId;
@ -156,6 +157,7 @@ public:
struct { struct {
bool isnew : 1; bool isnew : 1;
bool read : 1; bool read : 1;
bool deleted : 1;
} flag; } flag;
}; };

View File

@ -204,6 +204,7 @@ static void feedMsgToInfo(const RsFeedReaderMsg *msg, FeedMsgInfo &info)
info.flag.isnew = (msg->flag & RS_FEEDMSG_FLAG_NEW); info.flag.isnew = (msg->flag & RS_FEEDMSG_FLAG_NEW);
info.flag.read = (msg->flag & RS_FEEDMSG_FLAG_READ); info.flag.read = (msg->flag & RS_FEEDMSG_FLAG_READ);
info.flag.deleted = (msg->flag & RS_FEEDMSG_FLAG_DELETED);
} }
void p3FeedReader::setNotify(RsFeedReaderNotify *notify) void p3FeedReader::setNotify(RsFeedReaderNotify *notify)
@ -758,7 +759,8 @@ bool p3FeedReader::removeMsg(const std::string &feedId, const std::string &msgId
return false; return false;
} }
msgIt->second->flag |= RS_FEEDMSG_FLAG_DELETED; msgIt->second->flag |= RS_FEEDMSG_FLAG_DELETED | RS_FEEDMSG_FLAG_READ;
msgIt->second->flag &= ~RS_FEEDMSG_FLAG_NEW;
} }
if (changed) { if (changed) {
@ -803,7 +805,8 @@ bool p3FeedReader::removeMsgs(const std::string &feedId, const std::list<std::st
continue; continue;
} }
msgIt->second->flag |= RS_FEEDMSG_FLAG_DELETED; msgIt->second->flag |= RS_FEEDMSG_FLAG_DELETED | RS_FEEDMSG_FLAG_READ;
msgIt->second->flag &= ~RS_FEEDMSG_FLAG_NEW;
removedMsgs.push_back(*idIt); removedMsgs.push_back(*idIt);
} }

View File

@ -409,6 +409,24 @@ void NewsFeed::testFeeds(uint notifyFlags)
} }
} }
void NewsFeed::testFeed(FeedNotify *feedNotify)
{
if (!instance) {
return;
}
if (!feedNotify) {
return;
}
QWidget *feedItem = feedNotify->testFeedItem(instance);
if (!feedItem) {
return;
}
instance->addFeedItem(feedItem);
}
void NewsFeed::addFeedItem(QWidget *item) void NewsFeed::addFeedItem(QWidget *item)
{ {
item->setAttribute(Qt::WA_DeleteOnClose, true); item->setAttribute(Qt::WA_DeleteOnClose, true);

View File

@ -31,6 +31,7 @@ class RsFeedItem;
class ForumNewItem; class ForumNewItem;
class ChanMsgItem; class ChanMsgItem;
class ChatMsgItem; class ChatMsgItem;
class FeedNotify;
class NewsFeed : public MainPage, public FeedHolder, private Ui::NewsFeed class NewsFeed : public MainPage, public FeedHolder, private Ui::NewsFeed
{ {
@ -48,6 +49,7 @@ public:
virtual void openChat(std::string peerId); virtual void openChat(std::string peerId);
static void testFeeds(uint notifyFlags); static void testFeeds(uint notifyFlags);
static void testFeed(FeedNotify *feedNotify);
signals: signals:
void newsFeedChanged(int count); void newsFeedChanged(int count);

View File

@ -48,3 +48,8 @@ QWidget *FeedNotify::feedItem(FeedHolder */*parent*/)
{ {
return NULL; return NULL;
} }
QWidget *FeedNotify::testFeedItem(FeedHolder */*parent*/)
{
return NULL;
}

View File

@ -38,6 +38,7 @@ public:
virtual bool notifyEnabled(); virtual bool notifyEnabled();
virtual void setNotifyEnabled(bool /*enabled*/); virtual void setNotifyEnabled(bool /*enabled*/);
virtual QWidget *feedItem(FeedHolder */*parent*/); virtual QWidget *feedItem(FeedHolder */*parent*/);
virtual QWidget *testFeedItem(FeedHolder */*parent*/);
}; };
#endif // FEEDNOTIFY_H #endif // FEEDNOTIFY_H

View File

@ -285,6 +285,14 @@ void NotifyPage::notifyToggled()
void NotifyPage::testNotify() void NotifyPage::testNotify()
{ {
NewsFeed::testFeeds(getNewsFlags()); NewsFeed::testFeeds(getNewsFlags());
/* notify of plugins */
QList<FeedNotifySetting>::iterator feedNotifyIt;
for (feedNotifyIt = mFeedNotifySettingList.begin(); feedNotifyIt != mFeedNotifySettingList.end(); ++feedNotifyIt) {
if (feedNotifyIt->mEnabledCheckBox->isChecked()) {
NewsFeed::testFeed(feedNotifyIt->mFeedNotify);
}
}
} }
void NotifyPage::testToaster() void NotifyPage::testToaster()