mirror of
https://github.com/RetroShare/RetroShare.git
synced 2024-12-24 23:19:29 -05:00
Added api for news feeds to the plugin interface.
Added news feeds to the FeedReader plugin. Recompile needed. git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@6066 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
parent
f12473f7f7
commit
a60422069c
@ -52,6 +52,7 @@ class RsPQIService ;
|
||||
class RsAutoUpdatePage ;
|
||||
class PopupChatDialog ;
|
||||
class SoundEvents;
|
||||
class FeedNotify;
|
||||
|
||||
// Plugin API version. Not used yet, but will be in the future the
|
||||
// main value that decides for compatibility.
|
||||
@ -137,6 +138,11 @@ class RsPlugin
|
||||
|
||||
virtual QTranslator *qt_translator(QApplication * /* app */, const QString& /* languageCode */, const QString& /* externalDir */ ) const { return NULL ; }
|
||||
|
||||
//
|
||||
//================================== Notify ==================================//
|
||||
//
|
||||
virtual FeedNotify *qt_feedNotify() { return NULL; }
|
||||
|
||||
//
|
||||
//========================== Plugin Description ==============================//
|
||||
//
|
||||
|
@ -13,7 +13,9 @@ SOURCES = FeedReaderPlugin.cpp \
|
||||
gui/FeedReaderNotify.cpp \
|
||||
gui/FeedReaderConfig.cpp \
|
||||
gui/FeedReaderStringDefs.cpp \
|
||||
gui/FeedReaderFeedNotify.cpp \
|
||||
gui/FeedReaderUserNotify.cpp \
|
||||
gui/FeedReaderFeedItem.cpp \
|
||||
util/CURLWrapper.cpp \
|
||||
util/XMLWrapper.cpp \
|
||||
util/HTMLWrapper.cpp \
|
||||
@ -31,7 +33,9 @@ HEADERS = FeedReaderPlugin.h \
|
||||
gui/FeedReaderNotify.h \
|
||||
gui/FeedReaderConfig.h \
|
||||
gui/FeedReaderStringDefs.h \
|
||||
gui/FeedReaderFeedNotify.h \
|
||||
gui/FeedReaderUserNotify.h \
|
||||
gui/FeedReaderFeedItem.h \
|
||||
util/CURLWrapper.h \
|
||||
util/XMLWrapper.h \
|
||||
util/HTMLWrapper.h \
|
||||
@ -41,7 +45,8 @@ FORMS = gui/FeedReaderDialog.ui \
|
||||
gui/FeedReaderMessageWidget.ui \
|
||||
gui/AddFeedDialog.ui \
|
||||
gui/PreviewFeedDialog.ui \
|
||||
gui/FeedReaderConfig.ui
|
||||
gui/FeedReaderConfig.ui \
|
||||
gui/FeedReaderFeedItem.ui
|
||||
|
||||
TARGET = FeedReader
|
||||
|
||||
|
@ -27,7 +27,9 @@
|
||||
|
||||
#include "FeedReaderPlugin.h"
|
||||
#include "gui/FeedReaderDialog.h"
|
||||
#include "gui/FeedReaderNotify.h"
|
||||
#include "gui/FeedReaderConfig.h"
|
||||
#include "gui/FeedReaderFeedNotify.h"
|
||||
#include "services/p3FeedReader.h"
|
||||
|
||||
#define IMAGE_FEEDREADER ":/images/FeedReader.png"
|
||||
@ -77,6 +79,8 @@ FeedReaderPlugin::FeedReaderPlugin()
|
||||
mIcon = NULL ;
|
||||
mPlugInHandler = NULL;
|
||||
mFeedReader = NULL;
|
||||
mNotify = NULL;
|
||||
mFeedNotify = NULL;
|
||||
}
|
||||
|
||||
void FeedReaderPlugin::setInterfaces(RsPlugInInterfaces &/*interfaces*/)
|
||||
@ -91,17 +95,28 @@ ConfigPage *FeedReaderPlugin::qt_config_page() const
|
||||
MainPage *FeedReaderPlugin::qt_page() const
|
||||
{
|
||||
if (mainpage == NULL) {
|
||||
mainpage = new FeedReaderDialog(mFeedReader);
|
||||
mainpage = new FeedReaderDialog(mFeedReader, mNotify);
|
||||
}
|
||||
|
||||
return mainpage;
|
||||
}
|
||||
|
||||
FeedNotify *FeedReaderPlugin::qt_feedNotify()
|
||||
{
|
||||
if (!mFeedNotify) {
|
||||
mFeedNotify = new FeedReaderFeedNotify(mFeedReader, mNotify);
|
||||
}
|
||||
return mFeedNotify;
|
||||
}
|
||||
|
||||
RsPQIService *FeedReaderPlugin::rs_pqi_service() const
|
||||
{
|
||||
if (mFeedReader == NULL) {
|
||||
mFeedReader = new p3FeedReader(mPlugInHandler);
|
||||
rsFeedReader = mFeedReader;
|
||||
|
||||
mNotify = new FeedReaderNotify();
|
||||
mFeedReader->setNotify(mNotify);
|
||||
}
|
||||
|
||||
return mFeedReader;
|
||||
@ -110,8 +125,17 @@ RsPQIService *FeedReaderPlugin::rs_pqi_service() const
|
||||
void FeedReaderPlugin::stop()
|
||||
{
|
||||
if (mFeedReader) {
|
||||
mFeedReader->setNotify(NULL);
|
||||
mFeedReader->stop();
|
||||
}
|
||||
if (mNotify) {
|
||||
delete(mNotify);
|
||||
mNotify = NULL;
|
||||
}
|
||||
if (mFeedNotify) {
|
||||
delete mFeedNotify;
|
||||
mFeedNotify = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
void FeedReaderPlugin::setPlugInHandler(RsPluginHandler *pgHandler)
|
||||
|
@ -27,6 +27,7 @@
|
||||
#include "services/p3FeedReader.h"
|
||||
|
||||
class p3FeedReader;
|
||||
class FeedReaderNotify;
|
||||
class RsForums;
|
||||
|
||||
class FeedReaderPlugin: public RsPlugin
|
||||
@ -52,10 +53,13 @@ public:
|
||||
virtual void setInterfaces(RsPlugInInterfaces& interfaces);
|
||||
virtual ConfigPage *qt_config_page() const;
|
||||
|
||||
virtual FeedNotify *qt_feedNotify();
|
||||
|
||||
private:
|
||||
mutable p3FeedReader *mFeedReader;
|
||||
mutable FeedReaderNotify *mNotify;
|
||||
mutable RsPluginHandler *mPlugInHandler;
|
||||
mutable MainPage *mainpage;
|
||||
mutable QIcon *mIcon;
|
||||
mutable FeedNotify *mFeedNotify;
|
||||
};
|
||||
|
||||
|
@ -55,8 +55,8 @@
|
||||
#define ROLE_FEED_ERROR Qt::UserRole + 8
|
||||
#define ROLE_FEED_DEACTIVATED Qt::UserRole + 9
|
||||
|
||||
FeedReaderDialog::FeedReaderDialog(RsFeedReader *feedReader, QWidget *parent)
|
||||
: MainPage(parent), mFeedReader(feedReader), ui(new Ui::FeedReaderDialog)
|
||||
FeedReaderDialog::FeedReaderDialog(RsFeedReader *feedReader, FeedReaderNotify *notify, QWidget *parent)
|
||||
: MainPage(parent), mFeedReader(feedReader), mNotify(notify), ui(new Ui::FeedReaderDialog)
|
||||
{
|
||||
/* Invoke the Qt Designer generated object setup routine */
|
||||
ui->setupUi(this);
|
||||
@ -65,8 +65,6 @@ FeedReaderDialog::FeedReaderDialog(RsFeedReader *feedReader, QWidget *parent)
|
||||
mOpenFeedIds = NULL;
|
||||
mMessageWidget = NULL;
|
||||
|
||||
mNotify = new FeedReaderNotify();
|
||||
mFeedReader->setNotify(mNotify);
|
||||
connect(mNotify, SIGNAL(feedChanged(QString,int)), this, SLOT(feedChanged(QString,int)));
|
||||
connect(mNotify, SIGNAL(msgChanged(QString,QString,int)), this, SLOT(msgChanged(QString,QString,int)));
|
||||
|
||||
@ -126,9 +124,6 @@ FeedReaderDialog::~FeedReaderDialog()
|
||||
delete(mFeedCompareRole);
|
||||
delete(ui);
|
||||
|
||||
mFeedReader->setNotify(NULL);
|
||||
delete(mNotify);
|
||||
|
||||
if (mOpenFeedIds) {
|
||||
delete mOpenFeedIds;
|
||||
mOpenFeedIds = NULL;
|
||||
|
@ -40,7 +40,7 @@ class FeedReaderDialog : public MainPage
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
FeedReaderDialog(RsFeedReader *feedReader, QWidget *parent = 0);
|
||||
FeedReaderDialog(RsFeedReader *feedReader, FeedReaderNotify *notify, QWidget *parent = 0);
|
||||
~FeedReaderDialog();
|
||||
|
||||
virtual UserNotify *getUserNotify(QObject *parent);
|
||||
|
166
plugins/FeedReader/gui/FeedReaderFeedItem.cpp
Normal file
166
plugins/FeedReader/gui/FeedReaderFeedItem.cpp
Normal file
@ -0,0 +1,166 @@
|
||||
/****************************************************************
|
||||
* RetroShare is distributed under the following license:
|
||||
*
|
||||
* Copyright (C) 2012 by Thunder
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
****************************************************************/
|
||||
|
||||
#include <QMenu>
|
||||
#include <QUrl>
|
||||
#include <QClipboard>
|
||||
#include <QDesktopServices>
|
||||
|
||||
#include "FeedReaderFeedItem.h"
|
||||
#include "ui_FeedReaderFeedItem.h"
|
||||
|
||||
#include "FeedReaderNotify.h"
|
||||
|
||||
#include "util/DateTime.h"
|
||||
#include "gui/feeds/FeedHolder.h"
|
||||
|
||||
/** Constructor */
|
||||
FeedReaderFeedItem::FeedReaderFeedItem(RsFeedReader *feedReader, FeedReaderNotify *notify, FeedHolder *parent, const FeedInfo &feedInfo, const FeedMsgInfo &msgInfo)
|
||||
: QWidget(NULL), mFeedReader(feedReader), mNotify(notify), mParent(parent), ui(new Ui::FeedReaderFeedItem)
|
||||
{
|
||||
/* Invoke the Qt Designer generated object setup routine */
|
||||
ui->setupUi(this);
|
||||
|
||||
setAttribute(Qt::WA_DeleteOnClose, true);
|
||||
|
||||
connect(ui->expandButton, SIGNAL(clicked(void)), this, SLOT(toggle(void)));
|
||||
connect(ui->clearButton, SIGNAL(clicked(void)), this, SLOT(removeItem(void)));
|
||||
connect(ui->readAndClearButton, SIGNAL(clicked()), this, SLOT(readAndClearItem()));
|
||||
connect(ui->linkButton, SIGNAL(clicked()), this, SLOT(openLink()));
|
||||
|
||||
connect(mNotify, SIGNAL(msgChanged(QString,QString,int)), this, SLOT(msgChanged(QString,QString,int)), Qt::QueuedConnection);
|
||||
|
||||
ui->expandFrame->hide();
|
||||
|
||||
mFeedId = feedInfo.feedId;
|
||||
mMsgId = msgInfo.msgId;
|
||||
|
||||
ui->titleLabel->setText(QString::fromUtf8(feedInfo.name.c_str()));
|
||||
ui->msgTitleLabel->setText(QString::fromUtf8(msgInfo.title.c_str()));
|
||||
ui->descriptionLabel->setText(QString::fromUtf8(msgInfo.description.c_str()));
|
||||
|
||||
ui->dateTimeLabel->setText(DateTime::formatLongDateTime(msgInfo.pubDate));
|
||||
|
||||
/* build menu for link button */
|
||||
mLink = QString::fromUtf8(msgInfo.link.c_str());
|
||||
if (mLink.isEmpty()) {
|
||||
ui->linkButton->setEnabled(false);
|
||||
} else {
|
||||
QMenu *menu = new QMenu(this);
|
||||
QAction *action = menu->addAction(tr("Open link in browser"), this, SLOT(openLink()));
|
||||
menu->addAction(tr("Copy link to clipboard"), this, SLOT(copyLink()));
|
||||
|
||||
QFont font = action->font();
|
||||
font.setBold(true);
|
||||
action->setFont(font);
|
||||
|
||||
ui->linkButton->setMenu(menu);
|
||||
}
|
||||
}
|
||||
|
||||
FeedReaderFeedItem::~FeedReaderFeedItem()
|
||||
{
|
||||
delete(ui);
|
||||
}
|
||||
|
||||
void FeedReaderFeedItem::toggle()
|
||||
{
|
||||
mParent->lockLayout(this, true);
|
||||
|
||||
if (ui->expandFrame->isHidden()) {
|
||||
ui->expandFrame->show();
|
||||
ui->expandButton->setIcon(QIcon(QString(":/images/edit_remove24.png")));
|
||||
ui->expandButton->setToolTip(tr("Hide"));
|
||||
|
||||
setMsgRead();
|
||||
} else {
|
||||
ui->expandFrame->hide();
|
||||
ui->expandButton->setIcon(QIcon(QString(":/images/edit_add24.png")));
|
||||
ui->expandButton->setToolTip(tr("Expand"));
|
||||
}
|
||||
|
||||
mParent->lockLayout(this, false);
|
||||
}
|
||||
|
||||
void FeedReaderFeedItem::removeItem()
|
||||
{
|
||||
mParent->lockLayout(this, true);
|
||||
hide();
|
||||
mParent->lockLayout(this, false);
|
||||
|
||||
if (mParent) {
|
||||
mParent->deleteFeedItem(this, 0);
|
||||
}
|
||||
}
|
||||
|
||||
/*********** SPECIFIC FUNCTIONS ***********************/
|
||||
|
||||
void FeedReaderFeedItem::readAndClearItem()
|
||||
{
|
||||
setMsgRead();
|
||||
removeItem();
|
||||
}
|
||||
|
||||
void FeedReaderFeedItem::setMsgRead()
|
||||
{
|
||||
disconnect(mNotify, SIGNAL(msgChanged(QString,QString,int)), this, SLOT(msgChanged(QString,QString,int)));
|
||||
mFeedReader->setMessageRead(mFeedId, mMsgId, true);
|
||||
connect(mNotify, SIGNAL(msgChanged(QString,QString,int)), this, SLOT(msgChanged(QString,QString,int)), Qt::QueuedConnection);
|
||||
}
|
||||
|
||||
void FeedReaderFeedItem::msgChanged(const QString &feedId, const QString &msgId, int /*type*/)
|
||||
{
|
||||
if (feedId.toStdString() != mFeedId) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (msgId.toStdString() != mMsgId) {
|
||||
return;
|
||||
}
|
||||
|
||||
FeedMsgInfo msgInfo;
|
||||
if (!mFeedReader->getMsgInfo(mFeedId, mMsgId, msgInfo)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!msgInfo.flag.isnew) {
|
||||
close();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
void FeedReaderFeedItem::copyLink()
|
||||
{
|
||||
if (mLink.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
QApplication::clipboard()->setText(mLink);
|
||||
}
|
||||
|
||||
void FeedReaderFeedItem::openLink()
|
||||
{
|
||||
if (mLink.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
QDesktopServices::openUrl(QUrl(mLink));
|
||||
}
|
70
plugins/FeedReader/gui/FeedReaderFeedItem.h
Normal file
70
plugins/FeedReader/gui/FeedReaderFeedItem.h
Normal file
@ -0,0 +1,70 @@
|
||||
/****************************************************************
|
||||
* RetroShare is distributed under the following license:
|
||||
*
|
||||
* Copyright (C) 2013 by Thunder
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
****************************************************************/
|
||||
|
||||
#ifndef _FEEDREADERFEEDITEM_H
|
||||
#define _FEEDREADERFEEDITEM_H
|
||||
|
||||
#include <QWidget>
|
||||
|
||||
namespace Ui {
|
||||
class FeedReaderFeedItem;
|
||||
}
|
||||
|
||||
class RsFeedReader;
|
||||
class FeedReaderNotify;
|
||||
class FeedHolder;
|
||||
class FeedInfo;
|
||||
class FeedMsgInfo;
|
||||
|
||||
class FeedReaderFeedItem : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
FeedReaderFeedItem(RsFeedReader *feedReader, FeedReaderNotify *notify, FeedHolder *parent, const FeedInfo &feedInfo, const FeedMsgInfo &msgInfo);
|
||||
~FeedReaderFeedItem();
|
||||
|
||||
private slots:
|
||||
/* default stuff */
|
||||
void removeItem();
|
||||
void toggle();
|
||||
|
||||
void readAndClearItem();
|
||||
void copyLink();
|
||||
void openLink();
|
||||
|
||||
void msgChanged(const QString &feedId, const QString &msgId, int type);
|
||||
|
||||
private:
|
||||
void setMsgRead();
|
||||
|
||||
RsFeedReader *mFeedReader;
|
||||
FeedReaderNotify *mNotify;
|
||||
FeedHolder *mParent;
|
||||
|
||||
std::string mFeedId;
|
||||
std::string mMsgId;
|
||||
QString mLink;
|
||||
|
||||
Ui::FeedReaderFeedItem *ui;
|
||||
};
|
||||
|
||||
#endif // _FEEDREADERFEEDITEM_H
|
321
plugins/FeedReader/gui/FeedReaderFeedItem.ui
Normal file
321
plugins/FeedReader/gui/FeedReaderFeedItem.ui
Normal file
@ -0,0 +1,321 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>FeedReaderFeedItem</class>
|
||||
<widget class="QWidget" name="FeedReaderFeedItem">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>629</width>
|
||||
<height>121</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_4">
|
||||
<property name="leftMargin">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="horizontalSpacing">
|
||||
<number>6</number>
|
||||
</property>
|
||||
<property name="verticalSpacing">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<item row="0" column="0">
|
||||
<widget class="QFrame" name="frame">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="autoFillBackground">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Sunken</enum>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_6">
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_4">
|
||||
<item>
|
||||
<widget class="QLabel" name="logoLabel">
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>48</width>
|
||||
<height>48</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="pixmap">
|
||||
<pixmap resource="FeedReader_images.qrc">:/images/FeedReader.png</pixmap>
|
||||
</property>
|
||||
<property name="scaledContents">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
||||
<item>
|
||||
<widget class="QLabel" name="titleLabel">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>11</pointsize>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string notr="true">Feed name</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="dateTimeLabel">
|
||||
<property name="font">
|
||||
<font>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
<stylestrategy>PreferAntialias</stylestrategy>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string notr="true">DateTime</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<property name="spacing">
|
||||
<number>8</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QLabel" name="msgTitleLabel">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Expanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>16777215</width>
|
||||
<height>60</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string notr="true"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt; color:#666666;">Short Description</span></p></body></html></string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="openExternalLinks">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="linkButton">
|
||||
<property name="focusPolicy">
|
||||
<enum>Qt::NoFocus</enum>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="FeedReader_images.qrc">
|
||||
<normaloff>:/images/Link.png</normaloff>:/images/Link.png</iconset>
|
||||
</property>
|
||||
<property name="popupMode">
|
||||
<enum>QToolButton::MenuButtonPopup</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="expandButton">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>24</width>
|
||||
<height>16777215</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="focusPolicy">
|
||||
<enum>Qt::NoFocus</enum>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Expand</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../../retroshare-gui/src/gui/images.qrc">
|
||||
<normaloff>:/images/edit_add24.png</normaloff>:/images/edit_add24.png</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="readAndClearButton">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>24</width>
|
||||
<height>16777215</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="focusPolicy">
|
||||
<enum>Qt::NoFocus</enum>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Set as read and remove item</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../../retroshare-gui/src/gui/images.qrc">
|
||||
<normaloff>:/images/cancel.png</normaloff>:/images/cancel.png</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="clearButton">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>24</width>
|
||||
<height>16777215</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="focusPolicy">
|
||||
<enum>Qt::NoFocus</enum>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Remove Item</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../../retroshare-gui/src/gui/images.qrc">
|
||||
<normaloff>:/images/close_normal.png</normaloff>:/images/close_normal.png</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QFrame" name="expandFrame">
|
||||
<layout class="QVBoxLayout">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QFrame" name="msgFrame">
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Sunken</enum>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<property name="leftMargin">
|
||||
<number>5</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>5</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>5</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>5</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QLabel" name="descriptionLabel">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="margin">
|
||||
<number>6</number>
|
||||
</property>
|
||||
<property name="indent">
|
||||
<number>-1</number>
|
||||
</property>
|
||||
<property name="openExternalLinks">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="textInteractionFlags">
|
||||
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources>
|
||||
<include location="FeedReader_images.qrc"/>
|
||||
<include location="../../../retroshare-gui/src/gui/images.qrc"/>
|
||||
</resources>
|
||||
<connections/>
|
||||
</ui>
|
118
plugins/FeedReader/gui/FeedReaderFeedNotify.cpp
Normal file
118
plugins/FeedReader/gui/FeedReaderFeedNotify.cpp
Normal file
@ -0,0 +1,118 @@
|
||||
/****************************************************************
|
||||
* RetroShare is distributed under the following license:
|
||||
*
|
||||
* Copyright (C) 2012 RetroShare Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
****************************************************************/
|
||||
|
||||
#include <QMutex>
|
||||
|
||||
#include "FeedReaderFeedNotify.h"
|
||||
#include "FeedReaderNotify.h"
|
||||
#include "FeedReaderFeedItem.h"
|
||||
#include "gui/settings/rsharesettings.h"
|
||||
#include "retroshare/rsiface.h"
|
||||
|
||||
FeedReaderFeedNotify::FeedReaderFeedNotify(RsFeedReader *feedReader, FeedReaderNotify *notify, QObject *parent) :
|
||||
FeedNotify(parent), mFeedReader(feedReader), mNotify(notify)
|
||||
{
|
||||
mMutex = new QMutex();
|
||||
|
||||
connect(mNotify, SIGNAL(msgChanged(QString,QString,int)), this, SLOT(msgChanged(QString,QString,int)), Qt::QueuedConnection);
|
||||
}
|
||||
|
||||
FeedReaderFeedNotify::~FeedReaderFeedNotify()
|
||||
{
|
||||
delete(mMutex);
|
||||
}
|
||||
|
||||
bool FeedReaderFeedNotify::hasSetting(QString &name)
|
||||
{
|
||||
name = tr("Feed Reader");
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool FeedReaderFeedNotify::notifyEnabled()
|
||||
{
|
||||
return Settings->valueFromGroup("FeedReader", "FeedNotifyEnable", false).toBool();
|
||||
}
|
||||
|
||||
void FeedReaderFeedNotify::setNotifyEnabled(bool enabled)
|
||||
{
|
||||
Settings->setValueToGroup("FeedReader", "FeedNotifyEnable", enabled);
|
||||
|
||||
if (!enabled) {
|
||||
/* remove pending feed items */
|
||||
mMutex->lock();
|
||||
mPendingNewsFeed.clear();
|
||||
mMutex->unlock();
|
||||
}
|
||||
}
|
||||
|
||||
void FeedReaderFeedNotify::msgChanged(const QString &feedId, const QString &msgId, int type)
|
||||
{
|
||||
if (feedId.isEmpty() || msgId.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (type != NOTIFY_TYPE_ADD) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!notifyEnabled()) {
|
||||
return;
|
||||
}
|
||||
|
||||
mMutex->lock();
|
||||
|
||||
FeedItem feedItem;
|
||||
feedItem.mFeedId = feedId;
|
||||
feedItem.mMsgId = msgId;
|
||||
|
||||
mPendingNewsFeed.push_back(feedItem);
|
||||
|
||||
mMutex->unlock();
|
||||
}
|
||||
|
||||
QWidget *FeedReaderFeedNotify::feedItem(FeedHolder *parent)
|
||||
{
|
||||
bool msgPending = false;
|
||||
FeedInfo feedInfo;
|
||||
FeedMsgInfo msgInfo;
|
||||
|
||||
mMutex->lock();
|
||||
while (!mPendingNewsFeed.empty()) {
|
||||
FeedItem feedItem = mPendingNewsFeed.front();
|
||||
mPendingNewsFeed.pop_front();
|
||||
|
||||
if (mFeedReader->getFeedInfo(feedItem.mFeedId.toStdString(), feedInfo) &&
|
||||
mFeedReader->getMsgInfo(feedItem.mFeedId.toStdString(), feedItem.mMsgId.toStdString(), msgInfo)) {
|
||||
if (msgInfo.flag.isnew) {
|
||||
msgPending = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
mMutex->unlock();
|
||||
|
||||
if (!msgPending) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return new FeedReaderFeedItem(mFeedReader, mNotify, parent, feedInfo, msgInfo);
|
||||
}
|
65
plugins/FeedReader/gui/FeedReaderFeedNotify.h
Normal file
65
plugins/FeedReader/gui/FeedReaderFeedNotify.h
Normal file
@ -0,0 +1,65 @@
|
||||
/****************************************************************
|
||||
* RetroShare is distributed under the following license:
|
||||
*
|
||||
* Copyright (C) 2012 RetroShare Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
****************************************************************/
|
||||
|
||||
#ifndef FEEDREADERFEEDNOTIFY_H
|
||||
#define FEEDREADERFEEDNOTIFY_H
|
||||
|
||||
#include "gui/common/FeedNotify.h"
|
||||
|
||||
class RsFeedReader;
|
||||
class FeedReaderNotify;
|
||||
class QMutex;
|
||||
|
||||
class FeedReaderFeedNotify : public FeedNotify
|
||||
{
|
||||
Q_OBJECT
|
||||
protected:
|
||||
class FeedItem
|
||||
{
|
||||
public:
|
||||
FeedItem() {}
|
||||
|
||||
public:
|
||||
QString mFeedId;
|
||||
QString mMsgId;
|
||||
};
|
||||
|
||||
public:
|
||||
FeedReaderFeedNotify(RsFeedReader *feedReader, FeedReaderNotify *notify, QObject *parent = 0);
|
||||
~FeedReaderFeedNotify();
|
||||
|
||||
virtual bool hasSetting(QString &name);
|
||||
virtual bool notifyEnabled();
|
||||
virtual void setNotifyEnabled(bool enabled);
|
||||
virtual QWidget *feedItem(FeedHolder *parent);
|
||||
|
||||
private slots:
|
||||
void msgChanged(const QString &feedId, const QString &msgId, int type);
|
||||
|
||||
private:
|
||||
RsFeedReader *mFeedReader;
|
||||
FeedReaderNotify *mNotify;
|
||||
|
||||
QMutex *mMutex;
|
||||
QList<FeedItem> mPendingNewsFeed;
|
||||
};
|
||||
|
||||
#endif // FEEDREADERFEEDNOTIFY_H
|
@ -42,40 +42,22 @@ bool FeedReaderUserNotify::hasSetting(QString &name)
|
||||
|
||||
bool FeedReaderUserNotify::notifyEnabled()
|
||||
{
|
||||
bool enable = true;
|
||||
|
||||
Settings->beginGroup(QString("FeedReader"));
|
||||
enable = Settings->value("TrayNotifyEnable", enable).toBool();
|
||||
Settings->endGroup();
|
||||
|
||||
return enable;
|
||||
return Settings->valueFromGroup("FeedReader", "TrayNotifyEnable", true).toBool();
|
||||
}
|
||||
|
||||
bool FeedReaderUserNotify::notifyCombined()
|
||||
{
|
||||
bool combined = false;
|
||||
|
||||
Settings->beginGroup(QString("FeedReader"));
|
||||
combined = Settings->value("TrayNotifyCombined", combined).toBool();
|
||||
Settings->endGroup();
|
||||
|
||||
return combined;
|
||||
return Settings->valueFromGroup("FeedReader", "TrayNotifyCombined", false).toBool();
|
||||
}
|
||||
|
||||
bool FeedReaderUserNotify::notifyBlink()
|
||||
{
|
||||
bool blink = false;
|
||||
|
||||
Settings->beginGroup(QString("FeedReader"));
|
||||
blink = Settings->value("TrayNotifyBlink", blink).toBool();
|
||||
Settings->endGroup();
|
||||
|
||||
return blink;
|
||||
return Settings->valueFromGroup("FeedReader", "TrayNotifyBlink", false).toBool();
|
||||
}
|
||||
|
||||
void FeedReaderUserNotify::setNotifyEnabled(bool enabled, bool combined, bool blink)
|
||||
{
|
||||
Settings->beginGroup(QString("FeedReader"));
|
||||
Settings->beginGroup("FeedReader");
|
||||
Settings->setValue("TrayNotifyEnable", enabled);
|
||||
Settings->setValue("TrayNotifyCombined", combined);
|
||||
Settings->setValue("TrayNotifyBlink", blink);
|
||||
|
@ -287,113 +287,155 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gui/FeedReaderDialog.cpp" line="95"/>
|
||||
<location filename="../gui/FeedReaderDialog.cpp" line="93"/>
|
||||
<source>Message Folders</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gui/FeedReaderDialog.cpp" line="292"/>
|
||||
<location filename="../gui/FeedReaderDialog.cpp" line="287"/>
|
||||
<source>New</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gui/FeedReaderDialog.cpp" line="293"/>
|
||||
<location filename="../gui/FeedReaderDialog.cpp" line="288"/>
|
||||
<source>Feed</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gui/FeedReaderDialog.cpp" line="297"/>
|
||||
<location filename="../gui/FeedReaderDialog.cpp" line="292"/>
|
||||
<source>Folder</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gui/FeedReaderDialog.cpp" line="305"/>
|
||||
<location filename="../gui/FeedReaderDialog.cpp" line="300"/>
|
||||
<source>Open in new tab</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gui/FeedReaderDialog.cpp" line="313"/>
|
||||
<location filename="../gui/FeedReaderDialog.cpp" line="308"/>
|
||||
<source>Edit</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gui/FeedReaderDialog.cpp" line="318"/>
|
||||
<location filename="../gui/FeedReaderDialog.cpp" line="313"/>
|
||||
<source>Delete</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gui/FeedReaderDialog.cpp" line="330"/>
|
||||
<location filename="../gui/FeedReaderDialog.cpp" line="325"/>
|
||||
<source>Update</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gui/FeedReaderDialog.cpp" line="333"/>
|
||||
<location filename="../gui/FeedReaderDialog.cpp" line="328"/>
|
||||
<source>Activate</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gui/FeedReaderDialog.cpp" line="333"/>
|
||||
<location filename="../gui/FeedReaderDialog.cpp" line="328"/>
|
||||
<source>Deactivate</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gui/FeedReaderDialog.cpp" line="513"/>
|
||||
<location filename="../gui/FeedReaderDialog.cpp" line="508"/>
|
||||
<source>No name</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gui/FeedReaderDialog.cpp" line="723"/>
|
||||
<location filename="../gui/FeedReaderDialog.cpp" line="718"/>
|
||||
<source>Add new folder</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gui/FeedReaderDialog.cpp" line="724"/>
|
||||
<location filename="../gui/FeedReaderDialog.cpp" line="719"/>
|
||||
<source>Please enter a name for the folder</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gui/FeedReaderDialog.cpp" line="730"/>
|
||||
<location filename="../gui/FeedReaderDialog.cpp" line="783"/>
|
||||
<location filename="../gui/FeedReaderDialog.cpp" line="725"/>
|
||||
<location filename="../gui/FeedReaderDialog.cpp" line="778"/>
|
||||
<source>Create folder</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gui/FeedReaderDialog.cpp" line="730"/>
|
||||
<location filename="../gui/FeedReaderDialog.cpp" line="783"/>
|
||||
<location filename="../gui/FeedReaderDialog.cpp" line="725"/>
|
||||
<location filename="../gui/FeedReaderDialog.cpp" line="778"/>
|
||||
<source>Cannot create folder.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gui/FeedReaderDialog.cpp" line="756"/>
|
||||
<location filename="../gui/FeedReaderDialog.cpp" line="751"/>
|
||||
<source>Remove folder</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gui/FeedReaderDialog.cpp" line="756"/>
|
||||
<location filename="../gui/FeedReaderDialog.cpp" line="751"/>
|
||||
<source>Remove feed</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gui/FeedReaderDialog.cpp" line="756"/>
|
||||
<location filename="../gui/FeedReaderDialog.cpp" line="751"/>
|
||||
<source>Do you want to remove the folder %1?</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gui/FeedReaderDialog.cpp" line="756"/>
|
||||
<location filename="../gui/FeedReaderDialog.cpp" line="751"/>
|
||||
<source>Do you want to remove the feed %1?</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gui/FeedReaderDialog.cpp" line="776"/>
|
||||
<location filename="../gui/FeedReaderDialog.cpp" line="771"/>
|
||||
<source>Edit folder</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gui/FeedReaderDialog.cpp" line="777"/>
|
||||
<location filename="../gui/FeedReaderDialog.cpp" line="772"/>
|
||||
<source>Please enter a new name for the folder</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>FeedReaderFeedItem</name>
|
||||
<message>
|
||||
<location filename="../gui/FeedReaderFeedItem.ui" line="178"/>
|
||||
<location filename="../gui/FeedReaderFeedItem.cpp" line="97"/>
|
||||
<source>Expand</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gui/FeedReaderFeedItem.ui" line="204"/>
|
||||
<source>Set as read and remove item</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gui/FeedReaderFeedItem.ui" line="230"/>
|
||||
<source>Remove Item</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gui/FeedReaderFeedItem.cpp" line="68"/>
|
||||
<source>Open link in browser</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gui/FeedReaderFeedItem.cpp" line="69"/>
|
||||
<source>Copy link to clipboard</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gui/FeedReaderFeedItem.cpp" line="91"/>
|
||||
<source>Hide</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>FeedReaderFeedNotify</name>
|
||||
<message>
|
||||
<location filename="../gui/FeedReaderFeedNotify.cpp" line="45"/>
|
||||
<source>Feed Reader</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>FeedReaderMessageWidget</name>
|
||||
<message>
|
||||
@ -480,42 +522,42 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gui/FeedReaderMessageWidget.cpp" line="230"/>
|
||||
<location filename="../gui/FeedReaderMessageWidget.cpp" line="232"/>
|
||||
<source>No name</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gui/FeedReaderMessageWidget.cpp" line="268"/>
|
||||
<location filename="../gui/FeedReaderMessageWidget.cpp" line="270"/>
|
||||
<source>Mark as read</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gui/FeedReaderMessageWidget.cpp" line="271"/>
|
||||
<location filename="../gui/FeedReaderMessageWidget.cpp" line="273"/>
|
||||
<source>Mark as unread</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gui/FeedReaderMessageWidget.cpp" line="274"/>
|
||||
<location filename="../gui/FeedReaderMessageWidget.cpp" line="276"/>
|
||||
<source>Mark all as read</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gui/FeedReaderMessageWidget.cpp" line="279"/>
|
||||
<location filename="../gui/FeedReaderMessageWidget.cpp" line="281"/>
|
||||
<source>Copy link</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gui/FeedReaderMessageWidget.cpp" line="282"/>
|
||||
<location filename="../gui/FeedReaderMessageWidget.cpp" line="284"/>
|
||||
<source>Remove</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gui/FeedReaderMessageWidget.cpp" line="655"/>
|
||||
<location filename="../gui/FeedReaderMessageWidget.cpp" line="654"/>
|
||||
<source>Hide</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gui/FeedReaderMessageWidget.cpp" line="659"/>
|
||||
<location filename="../gui/FeedReaderMessageWidget.cpp" line="658"/>
|
||||
<source>Expand</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -523,12 +565,12 @@
|
||||
<context>
|
||||
<name>FeedReaderPlugin</name>
|
||||
<message>
|
||||
<location filename="../FeedReaderPlugin.cpp" line="135"/>
|
||||
<location filename="../FeedReaderPlugin.cpp" line="159"/>
|
||||
<source>This plugin provides a Feedreader.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../FeedReaderPlugin.cpp" line="140"/>
|
||||
<location filename="../FeedReaderPlugin.cpp" line="164"/>
|
||||
<source>FeedReader</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -28,6 +28,7 @@
|
||||
#include <retroshare/rschannels.h>
|
||||
#include <retroshare/rsforums.h>
|
||||
#include <retroshare/rsmsgs.h>
|
||||
#include <retroshare/rsplugin.h>
|
||||
|
||||
#include "feeds/ChanNewItem.h"
|
||||
#include "feeds/ChanMsgItem.h"
|
||||
@ -49,6 +50,7 @@
|
||||
#include "settings/rsharesettings.h"
|
||||
#include "chat/ChatDialog.h"
|
||||
#include "msgs/MessageComposer.h"
|
||||
#include "common/FeedNotify.h"
|
||||
|
||||
const uint32_t NEWSFEED_PEERLIST = 0x0001;
|
||||
const uint32_t NEWSFEED_FORUMNEWLIST = 0x0002;
|
||||
@ -195,6 +197,23 @@ void NewsFeed::updateFeed()
|
||||
default:
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
/* process plugin feeds */
|
||||
int pluginCount = rsPlugins->nbPlugins();
|
||||
for (int i = 0; i < pluginCount; ++i) {
|
||||
RsPlugin *rsPlugin = rsPlugins->plugin(i);
|
||||
if (rsPlugin) {
|
||||
FeedNotify *feedNotify = rsPlugin->qt_feedNotify();
|
||||
if (feedNotify && feedNotify->notifyEnabled()) {
|
||||
QWidget *item = feedNotify->feedItem(this);
|
||||
if (item) {
|
||||
addFeedItem(item);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
50
retroshare-gui/src/gui/common/FeedNotify.cpp
Normal file
50
retroshare-gui/src/gui/common/FeedNotify.cpp
Normal file
@ -0,0 +1,50 @@
|
||||
/****************************************************************
|
||||
* RetroShare is distributed under the following license:
|
||||
*
|
||||
* Copyright (C) 2012 RetroShare Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
****************************************************************/
|
||||
|
||||
#include "FeedNotify.h"
|
||||
|
||||
FeedNotify::FeedNotify(QObject *parent) :
|
||||
QObject(parent)
|
||||
{
|
||||
}
|
||||
|
||||
FeedNotify::~FeedNotify()
|
||||
{
|
||||
}
|
||||
|
||||
bool FeedNotify::hasSetting(QString &/*name*/)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
bool FeedNotify::notifyEnabled()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
void FeedNotify::setNotifyEnabled(bool /*enabled*/)
|
||||
{
|
||||
}
|
||||
|
||||
QWidget *FeedNotify::feedItem(FeedHolder */*parent*/)
|
||||
{
|
||||
return NULL;
|
||||
}
|
43
retroshare-gui/src/gui/common/FeedNotify.h
Normal file
43
retroshare-gui/src/gui/common/FeedNotify.h
Normal file
@ -0,0 +1,43 @@
|
||||
/****************************************************************
|
||||
* RetroShare is distributed under the following license:
|
||||
*
|
||||
* Copyright (C) 2012 RetroShare Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
****************************************************************/
|
||||
|
||||
#ifndef FEEDNOTIFY_H
|
||||
#define FEEDNOTIFY_H
|
||||
|
||||
#include <QObject>
|
||||
|
||||
class FeedHolder;
|
||||
|
||||
class FeedNotify : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
FeedNotify(QObject *parent = 0);
|
||||
~FeedNotify();
|
||||
|
||||
virtual bool hasSetting(QString &/*name*/);
|
||||
virtual bool notifyEnabled();
|
||||
virtual void setNotifyEnabled(bool /*enabled*/);
|
||||
virtual QWidget *feedItem(FeedHolder */*parent*/);
|
||||
};
|
||||
|
||||
#endif // FEEDNOTIFY_H
|
@ -19,15 +19,16 @@
|
||||
* Boston, MA 02110-1301, USA.
|
||||
****************************************************************/
|
||||
|
||||
|
||||
#include <rshare.h>
|
||||
#include "NotifyPage.h"
|
||||
|
||||
#include <retroshare/rsnotify.h>
|
||||
#include <retroshare/rsplugin.h>
|
||||
#include "rsharesettings.h"
|
||||
|
||||
#include "gui/MainWindow.h"
|
||||
#include "gui/common/UserNotify.h"
|
||||
#include "gui/common/FeedNotify.h"
|
||||
#include "gui/notifyqt.h"
|
||||
#include "gui/NewsFeed.h"
|
||||
|
||||
@ -41,11 +42,34 @@ NotifyPage::NotifyPage(QWidget * parent, Qt::WFlags flags)
|
||||
connect(ui.notifyButton, SIGNAL(clicked()), this, SLOT(testNotify()));
|
||||
connect(ui.toasterButton, SIGNAL(clicked()), this, SLOT(testToaster()));
|
||||
|
||||
/* add user notify */
|
||||
QFont font = ui.notify_Peers->font(); // use font from existing checkbox
|
||||
|
||||
/* add feed notify */
|
||||
int row = 0;
|
||||
int pluginCount = rsPlugins->nbPlugins();
|
||||
for (int i = 0; i < pluginCount; ++i) {
|
||||
RsPlugin *rsPlugin = rsPlugins->plugin(i);
|
||||
if (rsPlugin) {
|
||||
FeedNotify *feedNotify = rsPlugin->qt_feedNotify();
|
||||
if (feedNotify) {
|
||||
QString name;
|
||||
if (!feedNotify->hasSetting(name)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
QCheckBox *enabledCheckBox = new QCheckBox(name, this);
|
||||
enabledCheckBox->setFont(font);
|
||||
ui.feedLayout->addWidget(enabledCheckBox, row++);
|
||||
|
||||
mFeedNotifySettingList.push_back(FeedNotifySetting(feedNotify, enabledCheckBox));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* add user notify */
|
||||
const QList<UserNotify*> &userNotifyList = MainWindow::getInstance()->getUserNotifyList();
|
||||
QList<UserNotify*>::const_iterator it;
|
||||
int row = 0;
|
||||
row = 0;
|
||||
for (it = userNotifyList.begin(); it != userNotifyList.end(); ++it) {
|
||||
UserNotify *userNotify = *it;
|
||||
|
||||
@ -135,6 +159,12 @@ NotifyPage::save(QString &/*errmsg*/)
|
||||
if (ui.message_ConnectAttempt->isChecked())
|
||||
messageflags |= RS_MESSAGE_CONNECT_ATTEMPT;
|
||||
|
||||
/* save feed notify */
|
||||
QList<FeedNotifySetting>::iterator feedNotifyIt;
|
||||
for (feedNotifyIt = mFeedNotifySettingList.begin(); feedNotifyIt != mFeedNotifySettingList.end(); ++feedNotifyIt) {
|
||||
feedNotifyIt->mFeedNotify->setNotifyEnabled(feedNotifyIt->mEnabledCheckBox->isChecked());
|
||||
}
|
||||
|
||||
/* save user notify */
|
||||
QList<UserNotifySetting>::iterator notifyIt;
|
||||
for (notifyIt = mUserNotifySettingList.begin(); notifyIt != mUserNotifySettingList.end(); ++notifyIt) {
|
||||
@ -218,12 +248,18 @@ void NotifyPage::load()
|
||||
ui.spinBoxToasterXMargin->setValue(margin.x());
|
||||
ui.spinBoxToasterYMargin->setValue(margin.y());
|
||||
|
||||
/* load feed notify */
|
||||
QList<FeedNotifySetting>::iterator feedNotifyIt;
|
||||
for (feedNotifyIt = mFeedNotifySettingList.begin(); feedNotifyIt != mFeedNotifySettingList.end(); ++feedNotifyIt) {
|
||||
feedNotifyIt->mEnabledCheckBox->setChecked(feedNotifyIt->mFeedNotify->notifyEnabled());
|
||||
}
|
||||
|
||||
/* load user notify */
|
||||
QList<UserNotifySetting>::iterator notifyIt;
|
||||
for (notifyIt = mUserNotifySettingList.begin(); notifyIt != mUserNotifySettingList.end(); ++notifyIt) {
|
||||
notifyIt->mEnabledCheckBox->setChecked(notifyIt->mUserNotify->notifyEnabled());
|
||||
notifyIt->mCombinedCheckBox->setChecked(notifyIt->mUserNotify->notifyCombined());
|
||||
notifyIt->mBlinkCheckBox->setChecked(notifyIt->mUserNotify->notifyBlink());
|
||||
QList<UserNotifySetting>::iterator userNotifyIt;
|
||||
for (userNotifyIt = mUserNotifySettingList.begin(); userNotifyIt != mUserNotifySettingList.end(); ++userNotifyIt) {
|
||||
userNotifyIt->mEnabledCheckBox->setChecked(userNotifyIt->mUserNotify->notifyEnabled());
|
||||
userNotifyIt->mCombinedCheckBox->setChecked(userNotifyIt->mUserNotify->notifyCombined());
|
||||
userNotifyIt->mBlinkCheckBox->setChecked(userNotifyIt->mUserNotify->notifyBlink());
|
||||
}
|
||||
|
||||
notifyToggled();
|
||||
|
@ -26,6 +26,7 @@
|
||||
#include "ui_NotifyPage.h"
|
||||
|
||||
class UserNotify;
|
||||
class FeedNotify;
|
||||
|
||||
class UserNotifySetting
|
||||
{
|
||||
@ -40,6 +41,17 @@ public:
|
||||
: mUserNotify(userNotify), mEnabledCheckBox(enabledCheckBox), mCombinedCheckBox(combinedCheckBox), mBlinkCheckBox(blinkCheckBox) {}
|
||||
};
|
||||
|
||||
class FeedNotifySetting
|
||||
{
|
||||
public:
|
||||
FeedNotify *mFeedNotify;
|
||||
QCheckBox *mEnabledCheckBox;
|
||||
|
||||
public:
|
||||
FeedNotifySetting(FeedNotify *feedNotify, QCheckBox *enabledCheckBox)
|
||||
: mFeedNotify(feedNotify), mEnabledCheckBox(enabledCheckBox) {}
|
||||
};
|
||||
|
||||
class NotifyPage : public ConfigPage
|
||||
{
|
||||
Q_OBJECT
|
||||
@ -67,6 +79,7 @@ private:
|
||||
uint getNewsFlags();
|
||||
uint getNotifyFlags();
|
||||
|
||||
QList<FeedNotifySetting> mFeedNotifySettingList;
|
||||
QList<UserNotifySetting> mUserNotifySettingList;
|
||||
|
||||
/** Qt Designer generated object */
|
||||
|
@ -22,7 +22,16 @@
|
||||
<property name="spacing">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="margin">
|
||||
<property name="leftMargin">
|
||||
<number>6</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>6</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>6</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>6</number>
|
||||
</property>
|
||||
<item>
|
||||
@ -76,6 +85,9 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="feedLayout"/>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="Line" name="line">
|
||||
<property name="orientation">
|
||||
|
@ -3164,6 +3164,14 @@ p, li { white-space: pre-wrap; }
|
||||
<source>Paste my certificate link</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>No Forum</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Loading</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CreateLobbyDialog</name>
|
||||
@ -6034,10 +6042,6 @@ p, li { white-space: pre-wrap; }
|
||||
<source>Add Icon</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key recipients can publish to restricted-type Wiki Group, and can view and publish for private-type channels</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Share Publish Key</source>
|
||||
<translation type="unfinished"></translation>
|
||||
@ -6151,11 +6155,7 @@ p, li { white-space: pre-wrap; }
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Add Wiki Moderators</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select Wiki Moderators</source>
|
||||
<source>Key recipients can publish to restricted-type group and can view and publish for private-type channels</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
@ -12308,6 +12308,14 @@ Try to be patient!</source>
|
||||
<source>Edit Wiki Group</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Add Wiki Moderators</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select Wiki Moderators</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>WireDialog</name>
|
||||
|
@ -413,6 +413,7 @@ HEADERS += rshare.h \
|
||||
gui/common/LineEditClear.h \
|
||||
gui/common/DropLineEdit.h \
|
||||
gui/common/LinkTextBrowser.h \
|
||||
gui/common/FeedNotify.h \
|
||||
gui/common/UserNotify.h \
|
||||
gui/common/HeaderFrame.h \
|
||||
gui/common/MimeTextEdit.h \
|
||||
@ -680,6 +681,7 @@ SOURCES += main.cpp \
|
||||
gui/common/LineEditClear.cpp \
|
||||
gui/common/DropLineEdit.cpp \
|
||||
gui/common/LinkTextBrowser.cpp \
|
||||
gui/common/FeedNotify.cpp \
|
||||
gui/common/UserNotify.cpp \
|
||||
gui/common/HeaderFrame.cpp \
|
||||
gui/common/MimeTextEdit.cpp \
|
||||
|
Loading…
Reference in New Issue
Block a user