GxsChannels:

- cleaned source code
- added auto refresh
- added todo button
- removed some debug output
Updated english translation

git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@6517 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
thunder2 2013-07-19 09:48:51 +00:00
parent 2b9a211184
commit 9c40fb878f
22 changed files with 429 additions and 545 deletions

View File

@ -92,7 +92,7 @@ void CirclesDialog::todo()
"</ul>");
}
void CirclesDialog::updateDisplay(bool /*initialFill*/)
void CirclesDialog::updateDisplay(bool /*complete*/)
{
reloadAll();
}

View File

@ -40,7 +40,7 @@ public:
void loadRequest(const TokenQueue *queue, const TokenRequest &req);
protected:
virtual void updateDisplay(bool initialFill);
virtual void updateDisplay(bool complete);
private slots:
void todo();

View File

@ -505,7 +505,7 @@ void IdDialog::insertIdDetails(uint32_t token)
requestRepList(data.mMeta.mGroupId);
}
void IdDialog::updateDisplay(bool /*initialFill*/)
void IdDialog::updateDisplay(bool /*complete*/)
{
/* Update identity list */
requestIdList();

View File

@ -46,7 +46,7 @@ public:
void loadRequest(const TokenQueue *queue, const TokenRequest &req);
protected:
virtual void updateDisplay(bool initialFill);
virtual void updateDisplay(bool complete);
private slots:
void filterComboBoxChanged();

View File

@ -291,7 +291,7 @@ void PostedListDialog::openComments(uint32_t /*feed_type*/, const RsGxsGroupId &
/*****************************************************************************************/
void PostedListDialog::updateDisplay(bool /*initialFill*/)
void PostedListDialog::updateDisplay(bool /*complete*/)
{
std::cerr << "rsPosted->updateDisplay()";
std::cerr << std::endl;

View File

@ -80,7 +80,7 @@ private slots:
void showPrev();
protected:
virtual void updateDisplay(bool initialFill);
virtual void updateDisplay(bool complete);
private:
void updateShowText();

View File

@ -25,7 +25,7 @@ protected:
void showEvent(QShowEvent *e);
signals:
void fillDisplay(bool initialFill);
void fillDisplay(bool complete);
private slots:
void updateBroadcastChanged();

View File

@ -27,9 +27,9 @@ std::map<RsGxsGroupId, std::vector<RsGxsMessageId> > &RsGxsUpdateBroadcastPage::
return mBase->getMsgIds();
}
void RsGxsUpdateBroadcastPage::fillDisplay(bool initialFill)
void RsGxsUpdateBroadcastPage::fillDisplay(bool complete)
{
updateDisplay(initialFill);
updateDisplay(complete);
update(); // Qt flush
}

View File

@ -30,10 +30,10 @@ protected:
virtual void showEvent(QShowEvent *event);
// This is overloaded in subclasses.
virtual void updateDisplay(bool initialFill) = 0;
virtual void updateDisplay(bool complete) = 0;
private slots:
void fillDisplay(bool initialFill);
void fillDisplay(bool complete);
private:
RsGxsUpdateBroadcastBase *mBase;

View File

@ -27,9 +27,9 @@ std::map<RsGxsGroupId, std::vector<RsGxsMessageId> > &RsGxsUpdateBroadcastWidget
return mBase->getMsgIds();
}
void RsGxsUpdateBroadcastWidget::fillDisplay(bool initialFill)
void RsGxsUpdateBroadcastWidget::fillDisplay(bool complete)
{
updateDisplay(initialFill);
updateDisplay(complete);
update(); // Qt flush
}

View File

@ -30,10 +30,10 @@ protected:
virtual void showEvent(QShowEvent *event);
// This is overloaded in subclasses.
virtual void updateDisplay(bool initialFill) = 0;
virtual void updateDisplay(bool complete) = 0;
private slots:
void fillDisplay(bool initialFill);
void fillDisplay(bool complete);
private:
RsGxsUpdateBroadcastBase *mBase;

View File

@ -20,8 +20,6 @@
****************************************************************/
#include <QDragEnterEvent>
#include <QUrl>
#include <QTimer>
#include <QMessageBox>
#include <QBuffer>
#include <QMenu>
@ -31,19 +29,16 @@
#include "CreateGxsChannelMsg.h"
#include "gui/feeds/SubFileItem.h"
#include "util/misc.h"
#include "util/TokenQueue.h"
#include <retroshare/rsgxschannels.h>
#include <retroshare/rsfiles.h>
#include <iostream>
#define CREATEMSG_CHANNELINFO 0x002
#define CREATEMSG_CHANNELINFO 0x002
/** Constructor */
CreateGxsChannelMsg::CreateGxsChannelMsg(std::string cId)
: QDialog (NULL, Qt::WindowSystemMenuHint | Qt::WindowTitleHint | Qt::WindowMinMaxButtonsHint | Qt::WindowCloseButtonHint), mChannelId(cId) ,mCheckAttachment(true), mAutoMediaThumbNail(false)
: QDialog (NULL, Qt::WindowSystemMenuHint | Qt::WindowTitleHint | Qt::WindowMinMaxButtonsHint | Qt::WindowCloseButtonHint), mChannelId(cId) ,mCheckAttachment(true), mAutoMediaThumbNail(false)
{
/* Invoke the Qt Designer generated object setup routine */
setupUi(this);
@ -71,10 +66,10 @@ CreateGxsChannelMsg::CreateGxsChannelMsg(std::string cId)
thumbNailCb->setVisible(true);
thumbNailCb->setEnabled(true);
#endif
//buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false);
//buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false);
setAcceptDrops(true);
newChannelMsg();
}
@ -89,17 +84,16 @@ void CreateGxsChannelMsg::contextMenu(QPoint /*point*/)
if((*it).type() == RetroShareLink::TYPE_FILE)
n_file++ ;
QMenu contextMnu(this) ;
QMenu contextMnu(this) ;
QAction *action ;
if(n_file > 1)
action = contextMnu.addAction(QIcon(":/images/pasterslink.png"), tr("Paste RetroShare Links"), this, SLOT(pasteLink()));
else
action = contextMnu.addAction(QIcon(":/images/pasterslink.png"), tr("Paste RetroShare Link"), this, SLOT(pasteLink()));
QAction *action ;
if(n_file > 1)
action = contextMnu.addAction(QIcon(":/images/pasterslink.png"), tr("Paste RetroShare Links"), this, SLOT(pasteLink()));
else
action = contextMnu.addAction(QIcon(":/images/pasterslink.png"), tr("Paste RetroShare Link"), this, SLOT(pasteLink()));
action->setDisabled(n_file < 1) ;
contextMnu.exec(QCursor::pos());
action->setDisabled(n_file < 1) ;
contextMnu.exec(QCursor::pos());
}
void CreateGxsChannelMsg::pasteLink()
@ -135,12 +129,11 @@ void CreateGxsChannelMsg::pasteLink()
}
}
CreateGxsChannelMsg::~CreateGxsChannelMsg(){
CreateGxsChannelMsg::~CreateGxsChannelMsg()
{
#ifdef CHANNELS_FRAME_CATCHER
delete fCatcher;
#endif
}
/* Dropping */
@ -325,13 +318,11 @@ void CreateGxsChannelMsg::parseRsFileListAttachments(const std::string &attachLi
// TEMP NOT ALLOWED UNTIL FT WORKING.
addAttachment(hash, fname, size, false, source);
}
}
else
{
std::cerr << "Error Decode: Hash size: " << hash.size() << std::endl;
}
}
}
@ -368,22 +359,20 @@ void CreateGxsChannelMsg::addAttachment(const std::string &hash, const std::stri
return;
}
void CreateGxsChannelMsg::addExtraFile()
{
/* add a SubFileItem to the attachment section */
std::cerr << "CreateGxsChannelMsg::addExtraFile() opening file dialog";
std::cerr << std::endl;
/* add a SubFileItem to the attachment section */
std::cerr << "CreateGxsChannelMsg::addExtraFile() opening file dialog";
std::cerr << std::endl;
QStringList files;
if (misc::getOpenFileNames(this, RshareSettings::LASTDIR_EXTRAFILE, tr("Add Extra File"), "", files)) {
for (QStringList::iterator fileIt = files.begin(); fileIt != files.end(); fileIt++) {
addAttachment((*fileIt).toUtf8().constData());
QStringList files;
if (misc::getOpenFileNames(this, RshareSettings::LASTDIR_EXTRAFILE, tr("Add Extra File"), "", files)) {
for (QStringList::iterator fileIt = files.begin(); fileIt != files.end(); fileIt++) {
addAttachment((*fileIt).toUtf8().constData());
}
}
}
}
void CreateGxsChannelMsg::addAttachment(const std::string &path)
{
/* add a SubFileItem to the attachment section */
@ -402,13 +391,10 @@ void CreateGxsChannelMsg::addAttachment(const std::string &path)
for(it= mAttachments.begin(); it != mAttachments.end(); it++){
if((*it)->FilePath() == path){
QMessageBox::warning(this, tr("RetroShare"),
tr("File already Added and Hashed"),
QMessageBox::Ok, QMessageBox::Ok);
QMessageBox::warning(this, tr("RetroShare"), tr("File already Added and Hashed"), QMessageBox::Ok, QMessageBox::Ok);
return;
}
}
FileInfo fInfo;
@ -481,8 +467,8 @@ bool CreateGxsChannelMsg::setThumbNail(const std::string& path, int frame){
return true;
}
void CreateGxsChannelMsg::allowAutoMediaThumbNail(bool allowThumbNail){
void CreateGxsChannelMsg::allowAutoMediaThumbNail(bool allowThumbNail)
{
mAutoMediaThumbNail = allowThumbNail;
}
@ -520,7 +506,6 @@ void CreateGxsChannelMsg::checkAttachmentReady()
QTimer::singleShot( msec_rate, this, SLOT(checkAttachmentReady(void)));
}
void CreateGxsChannelMsg::cancelMsg()
{
std::cerr << "CreateGxsChannelMsg::cancelMsg() :"
@ -533,8 +518,7 @@ void CreateGxsChannelMsg::cancelMsg()
for(it = mAttachments.begin(); it != mAttachments.end(); it++)
rsGxsChannels->ExtraFileRemove((*it)->FileHash());
close();
return;
reject();
}
void CreateGxsChannelMsg::newChannelMsg()
@ -560,7 +544,6 @@ void CreateGxsChannelMsg::newChannelMsg()
}
}
void CreateGxsChannelMsg::saveChannelInfo(const RsGroupMetaData &meta)
{
mChannelMeta = meta;
@ -570,7 +553,6 @@ void CreateGxsChannelMsg::saveChannelInfo(const RsGroupMetaData &meta)
subjectEdit->setFocus();
}
void CreateGxsChannelMsg::sendMsg()
{
std::cerr << "CreateGxsChannelMsg::sendMsg()";
@ -609,17 +591,14 @@ void CreateGxsChannelMsg::sendMsg()
}
sendMessage(subject, msg, files);
}
void CreateGxsChannelMsg::sendMessage(const std::string &subject, const std::string &msg, const std::list<RsGxsFile> &files)
{
if(subject.empty())
{ /* error message */
QMessageBox::warning(this, tr("RetroShare"),
tr("Please add a Subject"),
QMessageBox::Ok, QMessageBox::Ok);
QMessageBox::warning(this, tr("RetroShare"), tr("Please add a Subject"), QMessageBox::Ok, QMessageBox::Ok);
return; //Don't add an empty Subject!!
}
else
@ -627,12 +606,12 @@ void CreateGxsChannelMsg::sendMessage(const std::string &subject, const std::str
if (rsGxsChannels)
{
RsGxsChannelPost post;
post.mMeta.mGroupId = mChannelId;
post.mMeta.mParentId = "";
post.mMeta.mThreadId = "";
post.mMeta.mMsgId = "";
post.mMeta.mMsgName = subject;
post.mMsg = msg;
post.mFiles = files;
@ -648,14 +627,12 @@ void CreateGxsChannelMsg::sendMessage(const std::string &subject, const std::str
picture.save(&buffer, "PNG"); // writes image into ba in PNG format
post.mThumbnail.copy((uint8_t *) ba.data(), ba.size());
}
uint32_t token;
rsGxsChannels->createPost(token, post);
}
close();
return;
accept();
}
void CreateGxsChannelMsg::addThumbnail()
@ -671,8 +648,6 @@ void CreateGxsChannelMsg::addThumbnail()
thumbnail_label->setPixmap(picture);
}
void CreateGxsChannelMsg::loadChannelInfo(const uint32_t &token)
{
std::cerr << "CreateGxsChannelMsg::loadChannelInfo()";
@ -693,7 +668,6 @@ void CreateGxsChannelMsg::loadChannelInfo(const uint32_t &token)
}
}
void CreateGxsChannelMsg::loadRequest(const TokenQueue *queue, const TokenRequest &req)
{
std::cerr << "CreateGxsChannelMsg::loadRequest() UserType: " << req.mUserType;
@ -710,12 +684,6 @@ void CreateGxsChannelMsg::loadRequest(const TokenQueue *queue, const TokenReques
default:
std::cerr << "CreateGxsChannelMsg::loadRequest() UNKNOWN UserType ";
std::cerr << std::endl;
}
}
}

View File

@ -23,7 +23,6 @@
#define _CREATE_GXSCHANNEL_MSG_H
#include "ui_CreateGxsChannelMsg.h"
#include <stdint.h>
#include "util/TokenQueue.h"
#include <retroshare/rsgxschannels.h>
@ -32,34 +31,31 @@
#endif
class SubFileItem;
class RsGxsFile;
class CreateGxsChannelMsg : public QDialog, public TokenResponse, private Ui::CreateGxsChannelMsg
{
Q_OBJECT
Q_OBJECT
public:
/** Default Constructor */
CreateGxsChannelMsg(std::string cId);
/** Default Constructor */
CreateGxsChannelMsg(std::string cId);
/** Default Destructor */
~CreateGxsChannelMsg();
/** Default Destructor */
~CreateGxsChannelMsg();
void addAttachment(const std::string &path);
void addAttachment(const std::string &hash, const std::string &fname, uint64_t size, bool local, const std::string &srcId);
void newChannelMsg();
QPixmap picture;
// overload from TokenResponse
virtual void loadRequest(const TokenQueue*, const TokenRequest&);
virtual void loadRequest(const TokenQueue*, const TokenRequest&);
protected:
virtual void dragEnterEvent(QDragEnterEvent *event);
virtual void dropEvent(QDropEvent *event);
virtual void dragEnterEvent(QDragEnterEvent *event);
virtual void dropEvent(QDropEvent *event);
private slots:
void addExtraFile();
@ -69,35 +65,32 @@ private slots:
void sendMsg();
void pasteLink() ;
void contextMenu(QPoint) ;
void addThumbnail();
void allowAutoMediaThumbNail(bool);
private:
void loadChannelInfo(const uint32_t &token);
void saveChannelInfo(const RsGroupMetaData &group);
void parseRsFileListAttachments(const std::string &attachList);
void sendMessage(const std::string &subject, const std::string &msg, const std::list<RsGxsFile> &files);
bool setThumbNail(const std::string& path, int frame);
std::string mChannelId;
std::string mChannelId;
RsGroupMetaData mChannelMeta;
bool mChannelMetaLoaded;
std::list<SubFileItem *> mAttachments;
bool mCheckAttachment;
bool mAutoMediaThumbNail;
bool mAutoMediaThumbNail;
TokenQueue *mChannelQueue;
#ifdef CHANNELS_FRAME_CATCHER
framecatcher* fCatcher;
framecatcher* fCatcher;
#endif
};
#endif

File diff suppressed because it is too large Load Diff

View File

@ -22,14 +22,9 @@
#ifndef _GXS_CHANNEL_DIALOG_H
#define _GXS_CHANNEL_DIALOG_H
#include <retroshare/rsgxschannels.h>
#include <QStandardItemModel>
#include <QThread>
#include <map>
#include "mainpage.h"
#include "RsAutoUpdatePage.h"
#include "gui/gxs/RsGxsUpdateBroadcastPage.h"
#include "ui_GxsChannelDialog.h"
@ -41,9 +36,9 @@
//class ChanMsgItem;
class GxsChannelPostItem;
class QTreeWidgetItem;
class UIStateHelper;
class GxsChannelDialog : public RsAutoUpdatePage, public TokenResponse, public GxsServiceDialog,
public FeedHolder
class GxsChannelDialog : public RsGxsUpdateBroadcastPage, public TokenResponse, public GxsServiceDialog, public FeedHolder
{
Q_OBJECT
@ -53,7 +48,7 @@ public:
/** Default Destructor */
~GxsChannelDialog();
virtual UserNotify *getUserNotify(QObject *parent);
// virtual UserNotify *getUserNotify(QObject *parent);
/* FeedHolder */
virtual QScrollArea *getScrollArea();
@ -63,16 +58,15 @@ public:
bool navigate(const std::string& channelId, const std::string& msgId);
/* overloaded from RsAuthUpdatePage */
virtual void updateDisplay();
/* NEW GXS FNS */
void loadRequest(const TokenQueue *queue, const TokenRequest &req);
protected:
virtual void updateDisplay(bool complete);
private slots:
void channelListCustomPopupMenu( QPoint point );
void todo();
void channelListCustomPopupMenu(QPoint point);
void selectChannel(const QString &id);
void createChannel();
@ -90,18 +84,13 @@ private slots:
void shareKey();
void copyChannelLink();
void channelMsgReadSatusChanged(const QString& channelId, const QString& msgId, int status);
// void channelMsgReadSatusChanged(const QString& channelId, const QString& msgId, int status);
//void generateMassData();
//void fillThreadFinished();
//void fillThreadAddMsg(const QString &channelId, const QString &channelMsgId, int current, int count);
/* NEW GXS FNS */
void forceUpdateDisplay();
private:
//void updateChannelList();
//void updateChannelMsgs();
@ -134,7 +123,6 @@ private:
std::string mChannelId; /* current Channel */
TokenQueue *mChannelQueue;
/* Layout Pointers */
QBoxLayout *mMsgLayout;
@ -148,6 +136,8 @@ private:
QTreeWidgetItem *popularChannels;
QTreeWidgetItem *otherChannels;
UIStateHelper *mStateHelper;
/* UI - from Designer */
Ui::GxsChannelDialog ui;
};

View File

@ -54,7 +54,7 @@
<string/>
</property>
<property name="pixmap">
<pixmap>:/images/channels32.png</pixmap>
<pixmap resource="../images.qrc">:/images/channels32.png</pixmap>
</property>
<property name="scaledContents">
<bool>true</bool>
@ -89,9 +89,9 @@
</spacer>
</item>
<item>
<widget class="QPushButton" name="refreshButton">
<widget class="QPushButton" name="todoPushButton">
<property name="text">
<string>refresh</string>
<string>Todo</string>
</property>
</widget>
</item>
@ -104,7 +104,7 @@
<string>Display</string>
</property>
<property name="icon">
<iconset>
<iconset resource="../images.qrc">
<normaloff>:/images/looknfeel.png</normaloff>:/images/looknfeel.png</iconset>
</property>
<property name="iconSize">
@ -133,7 +133,7 @@
<string>Create Channel</string>
</property>
<property name="icon">
<iconset>
<iconset resource="../images.qrc">
<normaloff>:/images/add_channel24.png</normaloff>:/images/add_channel24.png</iconset>
</property>
<property name="iconSize">
@ -194,7 +194,7 @@
<string/>
</property>
<property name="pixmap">
<pixmap>:/images/channels.png</pixmap>
<pixmap resource="../images.qrc">:/images/channels.png</pixmap>
</property>
<property name="scaledContents">
<bool>true</bool>
@ -236,7 +236,7 @@
<rect>
<x>0</x>
<y>0</y>
<width>380</width>
<width>362</width>
<height>16</height>
</rect>
</property>
@ -299,7 +299,7 @@
<string>Post to Channel</string>
</property>
<property name="icon">
<iconset>
<iconset resource="../images.qrc">
<normaloff>:/images/mail_send.png</normaloff>:/images/mail_send.png</iconset>
</property>
<property name="iconSize">
@ -360,7 +360,7 @@
</customwidget>
</customwidgets>
<resources>
<include location="images.qrc"/>
<include location="../images.qrc"/>
</resources>
<connections/>
</ui>

View File

@ -25,7 +25,7 @@
#include <iostream>
// To start with we only have open forums - with distribution controls.
const uint32_t ChannelCreateEnabledFlags = ( GXS_GROUP_FLAGS_ICON |
GXS_GROUP_FLAGS_DESCRIPTION |
GXS_GROUP_FLAGS_DISTRIBUTION |
@ -38,16 +38,16 @@ const uint32_t ChannelCreateEnabledFlags = ( GXS_GROUP_FLAGS_ICON |
const uint32_t ChannelCreateDefaultsFlags = ( GXS_GROUP_DEFAULTS_DISTRIB_PUBLIC |
//GXS_GROUP_DEFAULTS_DISTRIB_GROUP |
//GXS_GROUP_DEFAULTS_DISTRIB_LOCAL |
GXS_GROUP_DEFAULTS_PUBLISH_OPEN |
//GXS_GROUP_DEFAULTS_PUBLISH_THREADS |
//GXS_GROUP_DEFAULTS_PUBLISH_REQUIRED |
//GXS_GROUP_DEFAULTS_PUBLISH_ENCRYPTED |
//GXS_GROUP_DEFAULTS_PERSONAL_GPG |
GXS_GROUP_DEFAULTS_PERSONAL_REQUIRED |
//GXS_GROUP_DEFAULTS_PERSONAL_IFNOPUB |
GXS_GROUP_DEFAULTS_COMMENTS_YES |
//GXS_GROUP_DEFAULTS_COMMENTS_NO |
0);

View File

@ -309,9 +309,9 @@ void GxsForumThreadWidget::changeEvent(QEvent *e)
}
}
void GxsForumThreadWidget::updateDisplay(bool initialFill)
void GxsForumThreadWidget::updateDisplay(bool complete)
{
if (initialFill) {
if (complete) {
/* Not needed */
return;
}

View File

@ -61,7 +61,7 @@ signals:
protected:
bool eventFilter(QObject *obj, QEvent *ev);
void changeEvent(QEvent *e);
virtual void updateDisplay(bool initialFill);
virtual void updateDisplay(bool complete);
private slots:
/** Create the context popup menu and it's submenus */

View File

@ -257,10 +257,12 @@ void GxsForumsDialog::restoreForumKeys(void)
#endif
}
void GxsForumsDialog::updateDisplay(bool /*initialFill*/)
void GxsForumsDialog::updateDisplay(bool complete)
{
/* Update forums list */
insertForums();
if (complete || !getGrpIds().empty()) {
/* Update forums list */
insertForums();
}
}
void GxsForumsDialog::forumInfoToGroupItemInfo(const RsGroupMetaData &forumInfo, GroupItemInfo &groupItemInfo)

View File

@ -55,7 +55,7 @@ public:
virtual void loadRequest(const TokenQueue *queue, const TokenRequest &req);
protected:
virtual void updateDisplay(bool initialFill);
virtual void updateDisplay(bool complete);
private slots:
void settingsChanged();

View File

@ -5039,10 +5039,6 @@ p, li { white-space: pre-wrap; }
<source>Message Group</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Add Friend</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Edit Group</source>
<translation type="unfinished"></translation>
@ -5051,10 +5047,6 @@ p, li { white-space: pre-wrap; }
<source>Remove Group</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Chat lobbies</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Chat</source>
<translation type="unfinished"></translation>
@ -5071,10 +5063,6 @@ p, li { white-space: pre-wrap; }
<source>Recommend this Friend to...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Connect To Friend</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Copy certificate link</source>
<translation type="unfinished"></translation>
@ -5115,26 +5103,6 @@ p, li { white-space: pre-wrap; }
<source>Remove from all groups</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Create new</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Invite this group</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Invite this friend</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Show</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Unsubscribe</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Expand all</source>
<translation type="unfinished"></translation>
@ -5151,22 +5119,10 @@ p, li { white-space: pre-wrap; }
<source>Do you want to remove this Friend?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Unsubscribe to lobby</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>You are about to unsubscribe a chat lobby&lt;br&gt;You can only re-enter if your friends invite you again.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Columns</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Sort by</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>IP</source>
<translation type="unfinished"></translation>
@ -5179,6 +5135,22 @@ p, li { white-space: pre-wrap; }
<source>Show IP Column</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Attempt to connect</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Create new group</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Recommend many friends to each others</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Service permissions matrix</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>FriendRecommendDialog</name>
@ -5255,10 +5227,6 @@ p, li { white-space: pre-wrap; }
<source>Display</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Add</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Edit status message</source>
<translation type="unfinished"></translation>
@ -5375,10 +5343,6 @@ p, li { white-space: pre-wrap; }
<source>Local network</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Known people</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Welcome to RetroShare&apos;s group chat.</source>
<translation type="unfinished"></translation>
@ -5411,6 +5375,10 @@ p, li { white-space: pre-wrap; }
<source>Text File (*.txt );;All Files (*)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Keyring</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>GamesDialog</name>
@ -6254,10 +6222,6 @@ p, li { white-space: pre-wrap; }
<source>Channels</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>refresh</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Display</source>
<translation type="unfinished"></translation>
@ -6350,6 +6314,10 @@ p, li { white-space: pre-wrap; }
<source>No Channel Selected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Todo</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>GxsChannelGroupDialog</name>
@ -8902,10 +8870,6 @@ Do you want to save message ?</source>
<source>Search Network</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Show all accessible keys</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Name</source>
<translation type="unfinished"></translation>
@ -9112,6 +9076,10 @@ Right-click and select &apos;make friend&apos; to be able to connect.</source>
<source>Data inconsistency in the keyring. This is most probably a bug. Please contact the developers.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Only show people you trusted</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>NetworkPage</name>
@ -9176,6 +9144,10 @@ Right-click and select &apos;make friend&apos; to be able to connect.</source>
<source>This is a test.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> &lt;h1&gt;&lt;img width=&quot;32&quot; src=&quot;:/images/64px_help.png&quot;&gt;&amp;nbsp;&amp;nbsp;News Feed&lt;/h1&gt; &lt;p&gt;The News Feed displays the last events on your network, sorted by the time you received them. This gives you a summary of the activity of your friends. You can configure which events to show by pressing on &lt;b&gt;Options&lt;/b&gt;. &lt;/p&gt; &lt;p&gt;The various events shown are: &lt;ul&gt; &lt;li&gt;Connection attempts (useful to make friends with new people and control who&apos;s trying to reach you)&lt;/li&gt; &lt;li&gt;Channel and Forum posts&lt;/li&gt; &lt;li&gt;New Channels and Forums you can subscribe to&lt;/li&gt; &lt;li&gt;Private messages from your friends&lt;/li&gt; &lt;/ul&gt; &lt;/p&gt; </source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>NotifyPage</name>