Added new RetroShare link formats:

retroshare://forum?
retroshare://channel?...
Added "Go to" from the news feed of forums and channels.
Added "Copy RetroShare Link" to the forum/channel tree and messagees.
Fixed style sheet of the auto download button in ChannelFeed.
Fixed german language.

git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@4162 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
thunder2 2011-04-19 19:42:44 +00:00
parent d058bf9511
commit e5f3518225
20 changed files with 1826 additions and 1207 deletions

View File

@ -40,10 +40,9 @@
#include "channels/EditChanDetails.h" #include "channels/EditChanDetails.h"
#include "channels/ShareKey.h" #include "channels/ShareKey.h"
#include "notifyqt.h" #include "notifyqt.h"
#include "RetroShareLink.h"
#define CHAN_DEFAULT_IMAGE ":/images/channels.png" #define CHAN_DEFAULT_IMAGE ":/images/channels.png"
#define ENABLE_AUTO_DL "Enable Auto-Download"
#define DISABLE_AUTO_DL "Disable Auto-Download"
#define WARNING_LIMIT 3600*24*2 #define WARNING_LIMIT 3600*24*2
@ -188,6 +187,9 @@ void ChannelFeed::channelListCustomPopupMenu( QPoint point )
contextMnu.addAction( restoreKeysAct ); contextMnu.addAction( restoreKeysAct );
} }
QAction *action = contextMnu.addAction(QIcon(":/images/copyrslink.png"), tr("Copy RetroShare Link"), this, SLOT(copyChannelLink()));
action->setEnabled(!mChannelId.empty());
contextMnu.exec(QCursor::pos()); contextMnu.exec(QCursor::pos());
} }
@ -221,6 +223,23 @@ void ChannelFeed::shareKey()
shareUi.exec(); shareUi.exec();
} }
void ChannelFeed::copyChannelLink()
{
if (mChannelId.empty()) {
return;
}
ChannelInfo ci;
if (rsChannels->getChannelInfo(mChannelId, ci)) {
RetroShareLink link(RetroShareLink::TYPE_CHANNEL, QString::fromStdWString(ci.channelName), QString::fromStdString(ci.channelId), "");
if (link.valid() && link.type() == RetroShareLink::TYPE_CHANNEL) {
std::vector<RetroShareLink> urls;
urls.push_back(link);
RSLinkClipboard::copyLinks(urls);
}
}
}
void ChannelFeed::createMsg() void ChannelFeed::createMsg()
{ {
if (mChannelId.empty()) { if (mChannelId.empty()) {
@ -245,10 +264,7 @@ void ChannelFeed::selectChannel(const QString &id)
bool autoDl = false; bool autoDl = false;
rsChannels->channelGetAutoDl(mChannelId, autoDl); rsChannels->channelGetAutoDl(mChannelId, autoDl);
if(autoDl) setAutoDownloadButton(autoDl);
autoDownload->setText(QString(DISABLE_AUTO_DL));
else
autoDownload->setText(QString(ENABLE_AUTO_DL));
updateChannelMsgs(); updateChannelMsgs();
} }
@ -427,6 +443,7 @@ void ChannelFeed::updateChannelMsgs()
subscribeButton->setEnabled(false); subscribeButton->setEnabled(false);
unsubscribeButton->setEnabled(false); unsubscribeButton->setEnabled(false);
setAllAsReadButton->setEnabled(false); setAllAsReadButton->setEnabled(false);
autoDownload->setEnabled(false);
nameLabel->setText(tr("No Channel Selected")); nameLabel->setText(tr("No Channel Selected"));
iconLabel->setPixmap(QPixmap(":/images/channels.png")); iconLabel->setPixmap(QPixmap(":/images/channels.png"));
iconLabel->setEnabled(false); iconLabel->setEnabled(false);
@ -577,14 +594,58 @@ void ChannelFeed::toggleAutoDownload(){
// if auto dl is set true, then set false // if auto dl is set true, then set false
if(autoDl){ if(autoDl){
rsChannels->channelSetAutoDl(mChannelId, false); rsChannels->channelSetAutoDl(mChannelId, false);
autoDownload->setText(QString(ENABLE_AUTO_DL));
}else{ }else{
rsChannels->channelSetAutoDl(mChannelId, true); rsChannels->channelSetAutoDl(mChannelId, true);
autoDownload->setText(QString(DISABLE_AUTO_DL));
} }
setAutoDownloadButton(!autoDl);
} }
else{ else{
std::cerr << "Auto Download failed to set" std::cerr << "Auto Download failed to set"
<< std::endl; << std::endl;
} }
} }
bool ChannelFeed::navigate(const std::string& channelId, const std::string& msgId)
{
if (channelId.empty()) {
return false;
}
if (treeWidget->activateId(QString::fromStdString(channelId), msgId.empty()) == NULL) {
return false;
}
/* Messages are filled in selectChannel */
if (mChannelId != channelId) {
return false;
}
if (msgId.empty()) {
return true;
}
/* Search exisiting item */
std::list<ChanMsgItem*>::iterator mit;
for (mit = mChanMsgItems.begin(); mit != mChanMsgItems.end(); mit++) {
ChanMsgItem *item = *mit;
if (item->msgId() == msgId) {
// the next two lines are necessary to calculate the layout of the widgets in the scroll area (maybe there is a better solution)
item->show();
QCoreApplication::processEvents();
scrollArea->ensureWidgetVisible(item, 0, 0);
return true;
}
}
return false;
}
void ChannelFeed::setAutoDownloadButton(bool autoDl)
{
if (autoDl) {
autoDownload->setText(tr("Disable Auto-Download"));
}else{
autoDownload->setText(tr("Enable Auto-Download"));
}
}

View File

@ -49,6 +49,8 @@ public:
virtual void deleteFeedItem(QWidget *item, uint32_t type); virtual void deleteFeedItem(QWidget *item, uint32_t type);
virtual void openChat(std::string peerId); virtual void openChat(std::string peerId);
bool navigate(const std::string& channelId, const std::string& msgId);
/* overloaded from RsAuthUpdatePage */ /* overloaded from RsAuthUpdatePage */
virtual void updateDisplay(); virtual void updateDisplay();
@ -69,6 +71,7 @@ private slots:
void restoreChannelKeys(); void restoreChannelKeys();
void editChannelDetail(); void editChannelDetail();
void shareKey(); void shareKey();
void copyChannelLink();
void channelMsgReadSatusChanged(const QString& channelId, const QString& msgId, int status); void channelMsgReadSatusChanged(const QString& channelId, const QString& msgId, int status);
@ -79,6 +82,8 @@ private:
void processSettings(bool load); void processSettings(bool load);
void setAutoDownloadButton(bool autoDl);
std::string mChannelId; /* current Channel */ std::string mChannelId; /* current Channel */
/* Layout Pointers */ /* Layout Pointers */

View File

@ -507,7 +507,27 @@ border-image: url(:/images/btn_26_pressed.png) 4;
</widget> </widget>
</item> </item>
<item row="0" column="5"> <item row="0" column="5">
<widget class="QPushButton" name="autoDownload"> <widget class="QToolButton" name="autoDownload">
<property name="styleSheet">
<string notr="true">QToolButton, QPushButton, QComboBox {
border-image: url(:/images/btn_26.png) 4;
border-width: 4;
padding: 0px 6px;
font-size: 12px;
}
QToolButton:hover, QPushButton:hover, QComboBox:hover {
border-image: url(:/images/btn_26_hover.png) 4;
}
QToolButton:disabled, QPushButton:disabled, QComboBox::disabled {
color:gray;
}
QToolButton:pressed, QPushButton:pressed{
border-image: url(:/images/btn_26_pressed.png) 4;
}</string>
</property>
<property name="text"> <property name="text">
<string>Enable Auto-download</string> <string>Enable Auto-download</string>
</property> </property>

View File

@ -35,6 +35,7 @@
#include "common/Emoticons.h" #include "common/Emoticons.h"
#include "common/RSItemDelegate.h" #include "common/RSItemDelegate.h"
#include "common/PopularityDefs.h" #include "common/PopularityDefs.h"
#include "RetroShareLink.h"
#include <retroshare/rspeers.h> #include <retroshare/rspeers.h>
#include <retroshare/rsforums.h> #include <retroshare/rsforums.h>
@ -60,6 +61,7 @@
#define IMAGE_INFO ":/images/info16.png" #define IMAGE_INFO ":/images/info16.png"
#define IMAGE_NEWFORUM ":/images/new_forum16.png" #define IMAGE_NEWFORUM ":/images/new_forum16.png"
#define IMAGE_FORUMAUTHD ":/images/konv_message2.png" #define IMAGE_FORUMAUTHD ":/images/konv_message2.png"
#define IMAGE_COPYLINK ":/images/copyrslink.png"
#define VIEW_LAST_POST 0 #define VIEW_LAST_POST 0
#define VIEW_THREADED 1 #define VIEW_THREADED 1
@ -274,8 +276,6 @@ void ForumsDialog::forumListCustomPopupMenu( QPoint point )
action = contextMnu.addAction(QIcon(IMAGE_UNSUBSCRIBE), tr("Unsubscribe to Forum"), this, SLOT(unsubscribeToForum())); action = contextMnu.addAction(QIcon(IMAGE_UNSUBSCRIBE), tr("Unsubscribe to Forum"), this, SLOT(unsubscribeToForum()));
action->setEnabled (!mCurrForumId.empty() && m_bIsForumSubscribed); action->setEnabled (!mCurrForumId.empty() && m_bIsForumSubscribed);
contextMnu.addSeparator(); contextMnu.addSeparator();
contextMnu.addAction(QIcon(IMAGE_NEWFORUM), tr("New Forum"), this, SLOT(newforum())); contextMnu.addAction(QIcon(IMAGE_NEWFORUM), tr("New Forum"), this, SLOT(newforum()));
@ -286,13 +286,15 @@ void ForumsDialog::forumListCustomPopupMenu( QPoint point )
action = contextMnu.addAction(QIcon(":/images/settings16.png"), tr("Edit Forum Details"), this, SLOT(editForumDetails())); action = contextMnu.addAction(QIcon(":/images/settings16.png"), tr("Edit Forum Details"), this, SLOT(editForumDetails()));
action->setEnabled (!mCurrForumId.empty () && m_bIsForumAdmin); action->setEnabled (!mCurrForumId.empty () && m_bIsForumAdmin);
QAction *restoreKeysAct = new QAction(QIcon(":/images/settings16.png"), tr("Restore Publish Rights for Forum" ), &contextMnu); QAction *restoreKeysAct = new QAction(QIcon(":/images/settings16.png"), tr("Restore Publish Rights for Forum" ), &contextMnu);
connect( restoreKeysAct , SIGNAL( triggered() ), this, SLOT( restoreForumKeys() ) ); connect( restoreKeysAct , SIGNAL( triggered() ), this, SLOT( restoreForumKeys() ) );
restoreKeysAct->setEnabled(!mCurrForumId.empty() && !m_bIsForumAdmin); restoreKeysAct->setEnabled(!mCurrForumId.empty() && !m_bIsForumAdmin);
contextMnu.addAction( restoreKeysAct); contextMnu.addAction( restoreKeysAct);
action = contextMnu.addAction(QIcon(IMAGE_COPYLINK), tr("Copy RetroShare Link"), this, SLOT(copyForumLink()));
action->setEnabled(!mCurrForumId.empty());
contextMnu.addSeparator(); contextMnu.addSeparator();
action = contextMnu.addAction(QIcon(":/images/message-mail-read.png"), tr("Mark all as read"), this, SLOT(markMsgAsReadAll())); action = contextMnu.addAction(QIcon(":/images/message-mail-read.png"), tr("Mark all as read"), this, SLOT(markMsgAsReadAll()));
@ -336,8 +338,6 @@ void ForumsDialog::threadListCustomPopupMenu( QPoint point )
QAction *markMsgAsUnreadChildren = new QAction(QIcon(":/images/message-mail.png"), tr("Mark as unread") + " (" + tr ("with children") + ")", &contextMnu); QAction *markMsgAsUnreadChildren = new QAction(QIcon(":/images/message-mail.png"), tr("Mark as unread") + " (" + tr ("with children") + ")", &contextMnu);
connect(markMsgAsUnreadChildren , SIGNAL(triggered()), this, SLOT(markMsgAsUnreadChildren())); connect(markMsgAsUnreadChildren , SIGNAL(triggered()), this, SLOT(markMsgAsUnreadChildren()));
if (m_bIsForumSubscribed) { if (m_bIsForumSubscribed) {
QList<QTreeWidgetItem*> Rows; QList<QTreeWidgetItem*> Rows;
QList<QTreeWidgetItem*> RowsRead; QList<QTreeWidgetItem*> RowsRead;
@ -385,6 +385,8 @@ void ForumsDialog::threadListCustomPopupMenu( QPoint point )
contextMnu.addAction( replyAct); contextMnu.addAction( replyAct);
contextMnu.addAction( newthreadAct); contextMnu.addAction( newthreadAct);
contextMnu.addAction( replyauthorAct); contextMnu.addAction( replyauthorAct);
QAction* action = contextMnu.addAction(QIcon(IMAGE_COPYLINK), tr( "Copy RetroShare Link"), this, SLOT(copyMessageLink()));
action->setEnabled(!mCurrForumId.empty() && !mCurrThreadId.empty());
contextMnu.addSeparator(); contextMnu.addSeparator();
contextMnu.addAction(markMsgAsRead); contextMnu.addAction(markMsgAsRead);
contextMnu.addAction(markMsgAsReadChildren); contextMnu.addAction(markMsgAsReadChildren);
@ -1395,6 +1397,40 @@ void ForumsDialog::markMsgAsUnreadAll()
markMsgAsReadUnread(false, true, true); markMsgAsReadUnread(false, true, true);
} }
void ForumsDialog::copyForumLink()
{
if (mCurrForumId.empty()) {
return;
}
ForumInfo fi;
if (rsForums->getForumInfo(mCurrForumId, fi)) {
RetroShareLink link(RetroShareLink::TYPE_FORUM, QString::fromStdWString(fi.forumName), QString::fromStdString(fi.forumId), "");
if (link.valid() && link.type() == RetroShareLink::TYPE_FORUM) {
std::vector<RetroShareLink> urls;
urls.push_back(link);
RSLinkClipboard::copyLinks(urls);
}
}
}
void ForumsDialog::copyMessageLink()
{
if (mCurrForumId.empty() || mCurrThreadId.empty()) {
return;
}
ForumInfo fi;
if (rsForums->getForumInfo(mCurrForumId, fi)) {
RetroShareLink link(RetroShareLink::TYPE_FORUM, QString::fromStdWString(fi.forumName), QString::fromStdString(mCurrForumId), QString::fromStdString(mCurrThreadId));
if (link.valid() && link.type() == RetroShareLink::TYPE_FORUM) {
std::vector<RetroShareLink> urls;
urls.push_back(link);
RSLinkClipboard::copyLinks(urls);
}
}
}
void ForumsDialog::newforum() void ForumsDialog::newforum()
{ {
CreateForum cf (this); CreateForum cf (this);
@ -1622,3 +1658,38 @@ void ForumsDialog::updateMessageSummaryList(std::string forumId)
} }
} }
} }
bool ForumsDialog::navigate(const std::string& forumId, const std::string& msgId)
{
if (forumId.empty()) {
return false;
}
if (ui.forumTreeWidget->activateId(QString::fromStdString(forumId), msgId.empty()) == NULL) {
return false;
}
/* Threads are filled in changedForum */
if (mCurrForumId != forumId) {
return false;
}
if (msgId.empty()) {
return true;
}
/* Search exisiting item */
QTreeWidgetItemIterator itemIterator(ui.threadTreeWidget);
QTreeWidgetItem *item = NULL;
while ((item = *itemIterator) != NULL) {
itemIterator++;
if (item->data(COLUMN_THREAD_DATA, ROLE_THREAD_MSGID).toString().toStdString() == msgId) {
ui.threadTreeWidget->setCurrentItem(item);
ui.threadTreeWidget->setFocus();
return true;
}
}
return false;
}

View File

@ -36,6 +36,8 @@ public:
ForumsDialog(QWidget *parent = 0); ForumsDialog(QWidget *parent = 0);
~ForumsDialog(); ~ForumsDialog();
bool navigate(const std::string& forumId, const std::string& msgId);
/* overloaded from RsAuthUpdatePage */ /* overloaded from RsAuthUpdatePage */
virtual void updateDisplay(); virtual void updateDisplay();
@ -61,6 +63,8 @@ private slots:
void markMsgAsUnread(); void markMsgAsUnread();
void markMsgAsUnreadAll(); void markMsgAsUnreadAll();
void markMsgAsUnreadChildren(); void markMsgAsUnreadChildren();
void copyForumLink();
void copyMessageLink();
/* handle splitter */ /* handle splitter */
void togglethreadview(); void togglethreadview();

View File

@ -29,16 +29,24 @@
#include <QObject> #include <QObject>
#include "RetroShareLink.h" #include "RetroShareLink.h"
#include "MainWindow.h"
#include "ForumsDialog.h"
#include "ChannelFeed.h"
#include "util/misc.h" #include "util/misc.h"
#include "common/PeerDefs.h" #include "common/PeerDefs.h"
#include <retroshare/rsfiles.h> #include <retroshare/rsfiles.h>
#include <retroshare/rspeers.h> #include <retroshare/rspeers.h>
#include <retroshare/rsforums.h>
#include <retroshare/rschannels.h>
//#define DEBUG_RSLINK 1 //#define DEBUG_RSLINK 1
#define HOST_FILE "file" #define HOST_FILE "file"
#define HOST_PERSON "person" #define HOST_PERSON "person"
#define HOST_FORUM "forum"
#define HOST_CHANNEL "channel"
#define HOST_REGEXP "file|person|forum|channel"
#define FILE_NAME "name" #define FILE_NAME "name"
#define FILE_SIZE "size" #define FILE_SIZE "size"
@ -47,6 +55,14 @@
#define PERSON_NAME "name" #define PERSON_NAME "name"
#define PERSON_HASH "hash" #define PERSON_HASH "hash"
#define FORUM_NAME "name"
#define FORUM_ID "id"
#define FORUM_MSGID "msgid"
#define CHANNEL_NAME "name"
#define CHANNEL_ID "id"
#define CHANNEL_MSGID "msgid"
RetroShareLink::RetroShareLink(const QUrl& url) RetroShareLink::RetroShareLink(const QUrl& url)
{ {
fromUrl(url); fromUrl(url);
@ -150,6 +166,26 @@ void RetroShareLink::fromUrl(const QUrl& url)
return; return;
} }
if (url.host() == HOST_FORUM) {
_type = TYPE_FORUM;
_name = url.queryItemValue(FORUM_NAME);
_hash = url.queryItemValue(FORUM_ID);
_msgId = url.queryItemValue(FORUM_MSGID);
_size = 0;
check();
return;
}
if (url.host() == HOST_CHANNEL) {
_type = TYPE_CHANNEL;
_name = url.queryItemValue(CHANNEL_NAME);
_hash = url.queryItemValue(CHANNEL_ID);
_msgId = url.queryItemValue(CHANNEL_MSGID);
_size = 0;
check();
return;
}
// bad link // bad link
#ifdef DEBUG_RSLINK #ifdef DEBUG_RSLINK
@ -158,6 +194,7 @@ void RetroShareLink::fromUrl(const QUrl& url)
clear(); clear();
} }
// file
RetroShareLink::RetroShareLink(const QString & name, uint64_t size, const QString & hash) RetroShareLink::RetroShareLink(const QString & name, uint64_t size, const QString & hash)
: _name(name),_size(size),_hash(hash) : _name(name),_size(size),_hash(hash)
{ {
@ -166,6 +203,7 @@ RetroShareLink::RetroShareLink(const QString & name, uint64_t size, const QStrin
check() ; check() ;
} }
// person
RetroShareLink::RetroShareLink(const QString & name, const QString & hash) RetroShareLink::RetroShareLink(const QString & name, const QString & hash)
: _name(name),_size(0),_hash(hash) : _name(name),_size(0),_hash(hash)
{ {
@ -174,6 +212,28 @@ RetroShareLink::RetroShareLink(const QString & name, const QString & hash)
check() ; check() ;
} }
// forum, channel
RetroShareLink::RetroShareLink(enumType type, const QString& name, const QString& id, const QString& msgId)
: _name(name),_size(0),_hash(id),_msgId(msgId)
{
_valid = false;
_type = TYPE_UNKNOWN;
switch (type) {
case TYPE_UNKNOWN:
case TYPE_FILE:
case TYPE_PERSON:
// wrong type
break;
case TYPE_FORUM:
case TYPE_CHANNEL:
_type = type;
break;
}
check() ;
}
void RetroShareLink::clear() void RetroShareLink::clear()
{ {
_valid = false; _valid = false;
@ -208,6 +268,26 @@ void RetroShareLink::check()
if(_name.isEmpty()) if(_name.isEmpty())
_valid = false; _valid = false;
if(_hash.isEmpty())
_valid = false;
break;
case TYPE_FORUM:
if(_size != 0)
_valid = false;
if(_name.isEmpty())
_valid = false;
if(_hash.isEmpty())
_valid = false;
break;
case TYPE_CHANNEL:
if(_size != 0)
_valid = false;
if(_name.isEmpty())
_valid = false;
if(_hash.isEmpty()) if(_hash.isEmpty())
_valid = false; _valid = false;
break; break;
@ -254,6 +334,40 @@ QString RetroShareLink::toString(bool encoded /*= true*/) const
return url.toEncoded(); return url.toEncoded();
} }
return url.toString();
}
case TYPE_FORUM:
{
QUrl url;
url.setScheme(RSLINK_SCHEME);
url.setHost(HOST_FORUM);
url.addQueryItem(FORUM_NAME, _name);
url.addQueryItem(FORUM_ID, _hash);
if (!_msgId.isEmpty()) {
url.addQueryItem(FORUM_MSGID, _msgId);
}
if (encoded) {
return url.toEncoded();
}
return url.toString();
}
case TYPE_CHANNEL:
{
QUrl url;
url.setScheme(RSLINK_SCHEME);
url.setHost(HOST_CHANNEL);
url.addQueryItem(CHANNEL_NAME, _name);
url.addQueryItem(CHANNEL_ID, _hash);
if (!_msgId.isEmpty()) {
url.addQueryItem(CHANNEL_MSGID, _msgId);
}
if (encoded) {
return url.toEncoded();
}
return url.toString(); return url.toString();
} }
} }
@ -425,6 +539,80 @@ bool RetroShareLink::process(int flag)
} }
return false; return false;
} }
case TYPE_FORUM:
{
#ifdef DEBUG_RSLINK
std::cerr << " RetroShareLink::process ForumRequest : name : " << name().toStdString() << ". id : " << hash().toStdString() << ". msgId : " << msgId().toStdString() << std::endl;
#endif
ForumInfo fi;
if (!rsForums->getForumInfo(id().toStdString(), fi)) {
if (flag & RSLINK_PROCESS_NOTIFY_ERROR) {
QMessageBox mb(QObject::tr("Forum Request canceled"), QObject::tr("The forum \"%1\" could not be found.").arg(name()),QMessageBox::Critical,QMessageBox::Ok,0,0);
mb.setWindowIcon(QIcon(QString::fromUtf8(":/images/rstray3.png")));
mb.exec();
}
return false;
}
ForumMsgInfo msg;
if (!msgId().isEmpty()) {
if (!rsForums->getForumMessage(fi.forumId, msgId().toStdString(), msg)) {
if (flag & RSLINK_PROCESS_NOTIFY_ERROR) {
QMessageBox mb(QObject::tr("Forum Request canceled"), QObject::tr("The forum message in forum \"%1\" could not be found.").arg(name()),QMessageBox::Critical,QMessageBox::Ok,0,0);
mb.setWindowIcon(QIcon(QString::fromUtf8(":/images/rstray3.png")));
mb.exec();
}
return false;
}
}
MainWindow::showWindow(MainWindow::Forums);
ForumsDialog *forumsDialog = dynamic_cast<ForumsDialog*>(MainWindow::getPage(MainWindow::Forums));
if (!forumsDialog) {
return false;
}
return forumsDialog->navigate(fi.forumId, msg.msgId);
}
case TYPE_CHANNEL:
{
#ifdef DEBUG_RSLINK
std::cerr << " RetroShareLink::process ChannelRequest : name : " << name().toStdString() << ". id : " << hash().toStdString() << ". msgId : " << msgId().toStdString() << std::endl;
#endif
ChannelInfo ci;
if (!rsChannels->getChannelInfo(id().toStdString(), ci)) {
if (flag & RSLINK_PROCESS_NOTIFY_ERROR) {
QMessageBox mb(QObject::tr("Channel Request canceled"), QObject::tr("The channel \"%1\" could not be found.").arg(name()),QMessageBox::Critical,QMessageBox::Ok,0,0);
mb.setWindowIcon(QIcon(QString::fromUtf8(":/images/rstray3.png")));
mb.exec();
}
return false;
}
ChannelMsgInfo msg;
if (!msgId().isEmpty()) {
if (!rsChannels->getChannelMessage(ci.channelId, msgId().toStdString(), msg)) {
if (flag & RSLINK_PROCESS_NOTIFY_ERROR) {
QMessageBox mb(QObject::tr("Channel Request canceled"), QObject::tr("The channel message in channel \"%1\" could not be found.").arg(name()),QMessageBox::Critical,QMessageBox::Ok,0,0);
mb.setWindowIcon(QIcon(QString::fromUtf8(":/images/rstray3.png")));
mb.exec();
}
return false;
}
}
MainWindow::showWindow(MainWindow::Channels);
ChannelFeed *channelFeed = dynamic_cast<ChannelFeed*>(MainWindow::getPage(MainWindow::Channels));
if (!channelFeed) {
return false;
}
return channelFeed->navigate(ci.channelId, msg.msgId);
}
} }
std::cerr << " RetroShareLink::process unknown type: " << type() << std::endl; std::cerr << " RetroShareLink::process unknown type: " << type() << std::endl;
@ -460,7 +648,7 @@ void RSLinkClipboard::parseClipboard(std::vector<RetroShareLink> &links)
std::cerr << "Parsing clipboard:" << text.toStdString() << std::endl ; std::cerr << "Parsing clipboard:" << text.toStdString() << std::endl ;
QRegExp rx("retroshare://(file|person)[^\r\n]+") ; QRegExp rx(QString("retroshare://(%1)[^\r\n]+").arg(HOST_REGEXP));
int pos = 0; int pos = 0;

View File

@ -47,7 +47,7 @@
class RetroShareLink class RetroShareLink
{ {
public: public:
enum enumType { TYPE_UNKNOWN, TYPE_FILE, TYPE_PERSON }; enum enumType { TYPE_UNKNOWN, TYPE_FILE, TYPE_PERSON, TYPE_FORUM, TYPE_CHANNEL };
public: public:
RetroShareLink(const QUrl& url); RetroShareLink(const QUrl& url);
@ -56,11 +56,15 @@ class RetroShareLink
RetroShareLink(const QString& name, uint64_t size, const QString& hash); RetroShareLink(const QString& name, uint64_t size, const QString& hash);
// person // person
RetroShareLink(const QString& name, const QString& hash); RetroShareLink(const QString& name, const QString& hash);
// forum, channel
RetroShareLink(enumType type, const QString& name, const QString& id, const QString& msgId);
enumType type() const {return _type; } enumType type() const {return _type; }
uint64_t size() const { return _size ; } uint64_t size() const { return _size ; }
const QString& name() const { return _name ; } const QString& name() const { return _name ; }
const QString& hash() const { return _hash ; } const QString& hash() const { return _hash ; }
const QString& id() const { return _hash ; }
const QString& msgId() const { return _msgId ; }
// get nice name for anchor // get nice name for anchor
QString niceName() const; QString niceName() const;
@ -97,7 +101,8 @@ class RetroShareLink
enumType _type; enumType _type;
QString _name; QString _name;
uint64_t _size; uint64_t _size;
QString _hash; QString _hash; // or id (forum, channel)
QString _msgId; // id of the message (forum, channel)
}; };
/// This class handles the copy/paste of links. Every member is static to ensure unicity. /// This class handles the copy/paste of links. Every member is static to ensure unicity.

View File

@ -342,6 +342,41 @@ void GroupTreeWidget::setUnreadCount(QTreeWidgetItem *item, int unreadCount)
} }
QTreeWidgetItem *GroupTreeWidget::getItemFromId(const QString &id)
{
if (id.isEmpty()) {
return NULL;
}
/* Search exisiting item */
QTreeWidgetItemIterator itemIterator(ui->treeWidget);
QTreeWidgetItem *item;
while ((item = *itemIterator) != NULL) {
itemIterator++;
if (item->parent() == NULL) {
continue;
}
if (item->data(COLUMN_DATA, ROLE_ID).toString() == id) {
return item;
}
}
}
QTreeWidgetItem *GroupTreeWidget::activateId(const QString &id, bool focus)
{
QTreeWidgetItem *item = getItemFromId(id);
if (item == NULL) {
return NULL;
}
ui->treeWidget->setCurrentItem(item);
if (focus) {
ui->treeWidget->setFocus();
}
return item;
}
void GroupTreeWidget::calculateScore(QTreeWidgetItem *item) void GroupTreeWidget::calculateScore(QTreeWidgetItem *item)
{ {
if (item) { if (item) {

View File

@ -76,6 +76,9 @@ public:
// Set the unread count of an item // Set the unread count of an item
void setUnreadCount(QTreeWidgetItem *item, int unreadCount); void setUnreadCount(QTreeWidgetItem *item, int unreadCount);
QTreeWidgetItem *getItemFromId(const QString &id);
QTreeWidgetItem *activateId(const QString &id, bool focus);
signals: signals:
void treeCustomContextMenuRequested(const QPoint &pos); void treeCustomContextMenuRequested(const QPoint &pos);
void treeCurrentItemChanged(const QString &id); void treeCurrentItemChanged(const QString &id);

View File

@ -28,6 +28,9 @@
#include "SubFileItem.h" #include "SubFileItem.h"
#include "gui/notifyqt.h" #include "gui/notifyqt.h"
#include "util/misc.h" #include "util/misc.h"
#include "gui/MainWindow.h"
#include "gui/ChannelFeed.h"
#include "gui/RetroShareLink.h"
#include <retroshare/rschannels.h> #include <retroshare/rschannels.h>
@ -53,11 +56,13 @@ ChanMsgItem::ChanMsgItem(FeedHolder *parent, uint32_t feedId, std::string chanId
/* general ones */ /* general ones */
connect( expandButton, SIGNAL( clicked( void ) ), this, SLOT( toggle ( void ) ) ); connect( expandButton, SIGNAL( clicked( void ) ), this, SLOT( toggle ( void ) ) );
connect( clearButton, SIGNAL( clicked( void ) ), this, SLOT( removeItem ( void ) ) ); connect( clearButton, SIGNAL( clicked( void ) ), this, SLOT( removeItem ( void ) ) );
connect( gotoButton, SIGNAL( clicked( void ) ), this, SLOT( gotoHome ( void ) ) );
/* specific */ /* specific */
connect( unsubscribeButton, SIGNAL( clicked( void ) ), this, SLOT( unsubscribeChannel ( void ) ) ); connect( unsubscribeButton, SIGNAL( clicked( void ) ), this, SLOT( unsubscribeChannel ( void ) ) );
connect( downloadButton, SIGNAL( clicked( void ) ), this, SLOT( download ( void ) ) ); connect( downloadButton, SIGNAL( clicked( void ) ), this, SLOT( download ( void ) ) );
connect( playButton, SIGNAL( clicked( void ) ), this, SLOT( play ( void ) ) ); connect( playButton, SIGNAL( clicked( void ) ), this, SLOT( play ( void ) ) );
connect( copyLinkButton, SIGNAL( clicked( void ) ), this, SLOT( copyLink ( void ) ) );
connect( readButton, SIGNAL( toggled(bool) ), this, SLOT( readToggled(bool) ) ); connect( readButton, SIGNAL( toggled(bool) ), this, SLOT( readToggled(bool) ) );
connect( NotifyQt::getInstance(), SIGNAL(channelMsgReadSatusChanged(QString,QString,int)), this, SLOT(channelMsgReadSatusChanged(QString,QString,int)), Qt::QueuedConnection); connect( NotifyQt::getInstance(), SIGNAL(channelMsgReadSatusChanged(QString,QString,int)), this, SLOT(channelMsgReadSatusChanged(QString,QString,int)), Qt::QueuedConnection);
@ -76,7 +81,6 @@ ChanMsgItem::ChanMsgItem(FeedHolder *parent, uint32_t feedId, std::string chanId
updateItem(); updateItem();
} }
void ChanMsgItem::updateItemStatic() void ChanMsgItem::updateItemStatic()
{ {
/* fill in */ /* fill in */
@ -93,8 +97,6 @@ void ChanMsgItem::updateItemStatic()
if (!rsChannels->getChannelMessage(mChanId, mMsgId, cmi)) if (!rsChannels->getChannelMessage(mChanId, mMsgId, cmi))
return; return;
m_inUpdateItemStatic = true; m_inUpdateItemStatic = true;
QString title; QString title;
@ -114,8 +116,10 @@ void ChanMsgItem::updateItemStatic()
} else { } else {
unsubscribeButton->setEnabled(false); unsubscribeButton->setEnabled(false);
} }
readButton->setVisible(false); readButton->hide();
newLabel->setVisible(false); newLabel->hide();
gotoButton->show();
copyLinkButton->hide();
} }
else else
{ {
@ -128,6 +132,8 @@ void ChanMsgItem::updateItemStatic()
unsubscribeButton->setEnabled(false); unsubscribeButton->setEnabled(false);
clearButton->hide(); clearButton->hide();
unsubscribeButton->hide(); unsubscribeButton->hide();
gotoButton->hide();
copyLinkButton->show();
if ((ci.channelFlags & RS_DISTRIB_SUBSCRIBED) || (ci.channelFlags & RS_DISTRIB_ADMIN)) { if ((ci.channelFlags & RS_DISTRIB_SUBSCRIBED) || (ci.channelFlags & RS_DISTRIB_ADMIN)) {
readButton->setVisible(true); readButton->setVisible(true);
@ -205,7 +211,6 @@ void ChanMsgItem::updateItemStatic()
m_inUpdateItemStatic = false; m_inUpdateItemStatic = false;
} }
void ChanMsgItem::setFileCleanUpWarning(uint32_t time_left) void ChanMsgItem::setFileCleanUpWarning(uint32_t time_left)
{ {
int hours = (int)time_left/3600; int hours = (int)time_left/3600;
@ -224,7 +229,6 @@ void ChanMsgItem::setFileCleanUpWarning(uint32_t time_left)
} }
void ChanMsgItem::updateItem() void ChanMsgItem::updateItem()
{ {
/* fill in */ /* fill in */
@ -337,11 +341,16 @@ void ChanMsgItem::gotoHome()
std::cerr << "ChanMsgItem::gotoHome()"; std::cerr << "ChanMsgItem::gotoHome()";
std::cerr << std::endl; std::cerr << std::endl;
#endif #endif
MainWindow::showWindow(MainWindow::Channels);
ChannelFeed *channelFeed = dynamic_cast<ChannelFeed*>(MainWindow::getPage(MainWindow::Channels));
if (channelFeed) {
channelFeed->navigate(mChanId, mMsgId);
}
} }
/*********** SPECIFIC FUNCTIONS ***********************/ /*********** SPECIFIC FUNCTIONS ***********************/
void ChanMsgItem::unsubscribeChannel() void ChanMsgItem::unsubscribeChannel()
{ {
#ifdef DEBUG_ITEM #ifdef DEBUG_ITEM
@ -403,3 +412,20 @@ void ChanMsgItem::channelMsgReadSatusChanged(const QString& channelId, const QSt
updateItemStatic(); updateItemStatic();
} }
} }
void ChanMsgItem::copyLink()
{
if (mChanId.empty() || mMsgId.empty()) {
return;
}
ChannelInfo ci;
if (rsChannels->getChannelInfo(mChanId, ci)) {
RetroShareLink link(RetroShareLink::TYPE_CHANNEL, QString::fromStdWString(ci.channelName), QString::fromStdString(ci.channelId), QString::fromStdString(mMsgId));
if (link.valid() && link.type() == RetroShareLink::TYPE_CHANNEL) {
std::vector<RetroShareLink> urls;
urls.push_back(link);
RSLinkClipboard::copyLinks(urls);
}
}
}

View File

@ -36,12 +36,12 @@ public:
/** Default Constructor */ /** Default Constructor */
ChanMsgItem(FeedHolder *parent, uint32_t feedId, std::string chanId, std::string msgId, bool isHome); ChanMsgItem(FeedHolder *parent, uint32_t feedId, std::string chanId, std::string msgId, bool isHome);
/** Default Destructor */
void updateItemStatic(); void updateItemStatic();
void small(); void small();
void setFileCleanUpWarning(uint32_t time_left); void setFileCleanUpWarning(uint32_t time_left);
const std::string &msgId() { return mMsgId; }
private slots: private slots:
/* default stuff */ /* default stuff */
void gotoHome(); void gotoHome();
@ -51,6 +51,7 @@ private slots:
void unsubscribeChannel(); void unsubscribeChannel();
void download(); void download();
void play(); void play();
void copyLink();
void readToggled(bool checked); void readToggled(bool checked);
void channelMsgReadSatusChanged(const QString& channelId, const QString& msgId, int status); void channelMsgReadSatusChanged(const QString& channelId, const QString& msgId, int status);

View File

@ -6,7 +6,7 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>528</width> <width>583</width>
<height>208</height> <height>208</height>
</rect> </rect>
</property> </property>
@ -152,7 +152,7 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="0" column="5" rowspan="2" colspan="4"> <item row="0" column="8" rowspan="2" colspan="5">
<widget class="QLabel" name="datetimelabel"> <widget class="QLabel" name="datetimelabel">
<property name="font"> <property name="font">
<font> <font>
@ -170,7 +170,7 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="2" column="6" colspan="3"> <item row="2" column="9" colspan="4">
<widget class="QLabel" name="filelabel"> <widget class="QLabel" name="filelabel">
<property name="font"> <property name="font">
<font> <font>
@ -185,7 +185,7 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="2" column="0" colspan="6"> <item row="2" column="0" colspan="9">
<widget class="QLabel" name="subjectLabel"> <widget class="QLabel" name="subjectLabel">
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Expanding"> <sizepolicy hsizetype="MinimumExpanding" vsizetype="Expanding">
@ -220,11 +220,7 @@ p, li { white-space: pre-wrap; }
</size> </size>
</property> </property>
<property name="toolTip"> <property name="toolTip">
<string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt; <string>Toggle Message Read Status</string>
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Sans'; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Toggle Message Read Status&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property> </property>
<property name="icon"> <property name="icon">
<iconset resource="../images.qrc"> <iconset resource="../images.qrc">
@ -313,7 +309,24 @@ border-radius: 3px}</string>
</property> </property>
</spacer> </spacer>
</item> </item>
<item row="4" column="5" colspan="2"> <item row="3" column="0">
<widget class="QLabel" name="warn_image_label">
<property name="text">
<string/>
</property>
<property name="pixmap">
<pixmap resource="../images.qrc">:/images/status_unknown.png</pixmap>
</property>
</widget>
</item>
<item row="3" column="1" colspan="9">
<widget class="QLabel" name="warning_label">
<property name="text">
<string notr="true">TextLabel</string>
</property>
</widget>
</item>
<item row="4" column="8" colspan="2">
<widget class="QPushButton" name="unsubscribeButton"> <widget class="QPushButton" name="unsubscribeButton">
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed"> <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
@ -339,7 +352,7 @@ border-radius: 3px}</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="4" column="7"> <item row="4" column="11">
<widget class="QPushButton" name="clearButton"> <widget class="QPushButton" name="clearButton">
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed"> <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
@ -365,7 +378,7 @@ border-radius: 3px}</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="4" column="8"> <item row="4" column="12">
<widget class="QPushButton" name="expandButton"> <widget class="QPushButton" name="expandButton">
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed"> <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
@ -394,20 +407,55 @@ border-radius: 3px}</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="3" column="0"> <item row="4" column="6">
<widget class="QLabel" name="warn_image_label"> <widget class="QPushButton" name="gotoButton">
<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="toolTip">
<string>Go to Channel Message</string>
</property>
<property name="text"> <property name="text">
<string/> <string/>
</property> </property>
<property name="pixmap"> <property name="icon">
<pixmap resource="../images.qrc">:/images/status_unknown.png</pixmap> <iconset resource="../images.qrc">
<normaloff>:/images/find-16.png</normaloff>:/images/find-16.png</iconset>
</property> </property>
</widget> </widget>
</item> </item>
<item row="3" column="1" colspan="6"> <item row="4" column="7">
<widget class="QLabel" name="warning_label"> <widget class="QPushButton" name="copyLinkButton">
<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="toolTip">
<string>Copy RetroShare Link</string>
</property>
<property name="text"> <property name="text">
<string notr="true">TextLabel</string> <string/>
</property>
<property name="icon">
<iconset resource="../images.qrc">
<normaloff>:/images/copyrslink.png</normaloff>:/images/copyrslink.png</iconset>
</property> </property>
</widget> </widget>
</item> </item>
@ -476,23 +524,6 @@ border-radius: 10px;}</string>
</widget> </widget>
<resources> <resources>
<include location="../images.qrc"/> <include location="../images.qrc"/>
<include location="../images.qrc"/>
<include location="../images.qrc"/>
<include location="../images.qrc"/>
<include location="../images.qrc"/>
<include location="../images.qrc"/>
<include location="../images.qrc"/>
<include location="../images.qrc"/>
<include location="../images.qrc"/>
<include location="../images.qrc"/>
<include location="../images.qrc"/>
<include location="../images.qrc"/>
<include location="../images.qrc"/>
<include location="../images.qrc"/>
<include location="../images.qrc"/>
<include location="../images.qrc"/>
<include location="../images.qrc"/>
<include location="../images.qrc"/>
</resources> </resources>
<connections/> <connections/>
</ui> </ui>

View File

@ -21,6 +21,8 @@
#include "ChanNewItem.h" #include "ChanNewItem.h"
#include "FeedHolder.h" #include "FeedHolder.h"
#include "gui/MainWindow.h"
#include "gui/ChannelFeed.h"
#include <retroshare/rschannels.h> #include <retroshare/rschannels.h>
@ -43,7 +45,7 @@ ChanNewItem::ChanNewItem(FeedHolder *parent, uint32_t feedId, std::string chanId
/* general ones */ /* general ones */
connect( expandButton, SIGNAL( clicked( void ) ), this, SLOT( toggle ( void ) ) ); connect( expandButton, SIGNAL( clicked( void ) ), this, SLOT( toggle ( void ) ) );
connect( clearButton, SIGNAL( clicked( void ) ), this, SLOT( removeItem ( void ) ) ); connect( clearButton, SIGNAL( clicked( void ) ), this, SLOT( removeItem ( void ) ) );
//connect( gotoButton, SIGNAL( clicked( void ) ), this, SLOT( gotoHome ( void ) ) ); connect( gotoButton, SIGNAL( clicked( void ) ), this, SLOT( gotoHome ( void ) ) );
/* specific ones */ /* specific ones */
connect( subscribeButton, SIGNAL( clicked( void ) ), this, SLOT( subscribeChannel ( void ) ) ); connect( subscribeButton, SIGNAL( clicked( void ) ), this, SLOT( subscribeChannel ( void ) ) );
@ -175,6 +177,12 @@ void ChanNewItem::gotoHome()
std::cerr << "ChanNewItem::gotoHome()"; std::cerr << "ChanNewItem::gotoHome()";
std::cerr << std::endl; std::cerr << std::endl;
#endif #endif
MainWindow::showWindow(MainWindow::Channels);
ChannelFeed *channelFeed = dynamic_cast<ChannelFeed*>(MainWindow::getPage(MainWindow::Channels));
if (channelFeed) {
channelFeed->navigate(mChanId, "");
}
} }
/*********** SPECIFIC FUNCTIOSN ***********************/ /*********** SPECIFIC FUNCTIOSN ***********************/

View File

@ -117,6 +117,26 @@ border-radius: 2px;}</string>
</property> </property>
</spacer> </spacer>
</item> </item>
<item>
<widget class="QPushButton" name="gotoButton">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="toolTip">
<string>Go to Channel</string>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="../images.qrc">
<normaloff>:/images/find-16.png</normaloff>:/images/find-16.png</iconset>
</property>
</widget>
</item>
<item> <item>
<widget class="QPushButton" name="subscribeButton"> <widget class="QPushButton" name="subscribeButton">
<property name="sizePolicy"> <property name="sizePolicy">

View File

@ -24,6 +24,8 @@
#include "ForumMsgItem.h" #include "ForumMsgItem.h"
#include "FeedHolder.h" #include "FeedHolder.h"
#include "gui/MainWindow.h"
#include "gui/ForumsDialog.h"
#include <retroshare/rsforums.h> #include <retroshare/rsforums.h>
#include <retroshare/rsmsgs.h> #include <retroshare/rsmsgs.h>
@ -52,7 +54,7 @@ ForumMsgItem::ForumMsgItem(FeedHolder *parent, uint32_t feedId, const std::strin
/* general ones */ /* general ones */
connect( expandButton, SIGNAL( clicked( void ) ), this, SLOT( toggle ( void ) ) ); connect( expandButton, SIGNAL( clicked( void ) ), this, SLOT( toggle ( void ) ) );
connect( clearButton, SIGNAL( clicked( void ) ), this, SLOT( removeItem ( void ) ) ); connect( clearButton, SIGNAL( clicked( void ) ), this, SLOT( removeItem ( void ) ) );
//connect( gotoButton, SIGNAL( clicked( void ) ), this, SLOT( gotoHome ( void ) ) ); connect( gotoButton, SIGNAL( clicked( void ) ), this, SLOT( gotoHome ( void ) ) );
/* specific ones */ /* specific ones */
connect( unsubscribeButton, SIGNAL( clicked( void ) ), this, SLOT( unsubscribeForum ( void ) ) ); connect( unsubscribeButton, SIGNAL( clicked( void ) ), this, SLOT( unsubscribeForum ( void ) ) );
@ -290,6 +292,12 @@ void ForumMsgItem::gotoHome()
std::cerr << "ForumMsgItem::gotoHome()"; std::cerr << "ForumMsgItem::gotoHome()";
std::cerr << std::endl; std::cerr << std::endl;
#endif #endif
MainWindow::showWindow(MainWindow::Forums);
ForumsDialog *forumsDialog = dynamic_cast<ForumsDialog*>(MainWindow::getPage(MainWindow::Forums));
if (forumsDialog) {
forumsDialog->navigate(mForumId, mPostId);
}
} }
/*********** SPECIFIC FUNCTIOSN ***********************/ /*********** SPECIFIC FUNCTIOSN ***********************/

View File

@ -245,6 +245,26 @@ border-radius: 10px}</string>
</property> </property>
</spacer> </spacer>
</item> </item>
<item>
<widget class="QPushButton" name="gotoButton">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="toolTip">
<string>Go to Forum Message</string>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="../images.qrc">
<normaloff>:/images/find-16.png</normaloff>:/images/find-16.png</iconset>
</property>
</widget>
</item>
<item> <item>
<widget class="QPushButton" name="unsubscribeButton"> <widget class="QPushButton" name="unsubscribeButton">
<property name="sizePolicy"> <property name="sizePolicy">

View File

@ -21,6 +21,8 @@
#include "ForumNewItem.h" #include "ForumNewItem.h"
#include "FeedHolder.h" #include "FeedHolder.h"
#include "gui/MainWindow.h"
#include "gui/ForumsDialog.h"
#include <retroshare/rsforums.h> #include <retroshare/rsforums.h>
#include "gui/forums/CreateForumMsg.h" #include "gui/forums/CreateForumMsg.h"
@ -42,7 +44,7 @@ ForumNewItem::ForumNewItem(FeedHolder *parent, uint32_t feedId, std::string foru
/* general ones */ /* general ones */
connect( expandButton, SIGNAL( clicked( void ) ), this, SLOT( toggle ( void ) ) ); connect( expandButton, SIGNAL( clicked( void ) ), this, SLOT( toggle ( void ) ) );
connect( clearButton, SIGNAL( clicked( void ) ), this, SLOT( removeItem ( void ) ) ); connect( clearButton, SIGNAL( clicked( void ) ), this, SLOT( removeItem ( void ) ) );
//connect( gotoButton, SIGNAL( clicked( void ) ), this, SLOT( gotoHome ( void ) ) ); connect( gotoButton, SIGNAL( clicked( void ) ), this, SLOT( gotoHome ( void ) ) );
/* specific ones */ /* specific ones */
connect( subscribeButton, SIGNAL( clicked( void ) ), this, SLOT( subscribeForum ( void ) ) ); connect( subscribeButton, SIGNAL( clicked( void ) ), this, SLOT( subscribeForum ( void ) ) );
@ -166,6 +168,12 @@ void ForumNewItem::gotoHome()
std::cerr << "ForumNewItem::gotoHome()"; std::cerr << "ForumNewItem::gotoHome()";
std::cerr << std::endl; std::cerr << std::endl;
#endif #endif
MainWindow::showWindow(MainWindow::Forums);
ForumsDialog *forumsDialog = dynamic_cast<ForumsDialog*>(MainWindow::getPage(MainWindow::Forums));
if (forumsDialog) {
forumsDialog->navigate(mForumId, "");
}
} }
/*********** SPECIFIC FUNCTIOSN ***********************/ /*********** SPECIFIC FUNCTIOSN ***********************/

View File

@ -124,6 +124,26 @@ border-radius: 10px}</string>
</property> </property>
</spacer> </spacer>
</item> </item>
<item>
<widget class="QPushButton" name="gotoButton">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="toolTip">
<string>Go to Forum</string>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="../images.qrc">
<normaloff>:/images/find-16.png</normaloff>:/images/find-16.png</iconset>
</property>
</widget>
</item>
<item> <item>
<widget class="QPushButton" name="subscribeButton"> <widget class="QPushButton" name="subscribeButton">
<property name="sizePolicy"> <property name="sizePolicy">

View File

@ -853,52 +853,66 @@ p, li { white-space: pre-wrap; }
<context> <context>
<name>ChanMsgItem</name> <name>ChanMsgItem</name>
<message> <message>
<location filename="../gui/feeds/ChanMsgItem.ui" line="+357"/> <location filename="../gui/feeds/ChanMsgItem.ui" line="+370"/>
<source>Remove Item</source> <source>Remove Item</source>
<translation>Eintrag entfernen</translation> <translation>Eintrag entfernen</translation>
</message> </message>
<message> <message>
<location line="+26"/> <location line="+26"/>
<location filename="../gui/feeds/ChanMsgItem.cpp" line="+316"/> <location filename="../gui/feeds/ChanMsgItem.cpp" line="+320"/>
<source>Expand</source> <source>Expand</source>
<translation>Erweitern</translation> <translation>Erweitern</translation>
</message> </message>
<message> <message>
<location line="-107"/> <location line="-124"/>
<source>Download</source> <source>Download</source>
<translation>Herunterladen</translation> <translation>Herunterladen</translation>
</message> </message>
<message> <message>
<location line="+16"/> <location line="-49"/>
<source>Toggle Message Read Status</source>
<translation>Setze Gelesen-Status des Beitrages</translation>
</message>
<message>
<location line="+65"/>
<source>Play</source> <source>Play</source>
<translation>Abspielen</translation> <translation>Abspielen</translation>
</message> </message>
<message> <message>
<location line="-69"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt; <source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt; &lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; } p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Sans&apos;; font-weight:400; font-style:normal;&quot;&gt; &lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Sans&apos;; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Toggle Message Read Status&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source> &lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Toggle Message Read Status&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished">Gelesen Status umschalten</translation> <translation type="obsolete">Gelesen Status umschalten</translation>
</message> </message>
<message> <message>
<location line="+41"/> <location line="-28"/>
<source>New</source> <source>New</source>
<translation>Neu</translation> <translation>Neu</translation>
</message> </message>
<message> <message>
<location line="+67"/> <location line="+84"/>
<source>Unsubscribe From Channel</source> <source>Unsubscribe From Channel</source>
<translation>Kanal abbestellen</translation> <translation>Kanal abbestellen</translation>
</message> </message>
<message> <message>
<location filename="../gui/feeds/ChanMsgItem.cpp" line="-102"/> <location line="+81"/>
<source>Go to Channel Message</source>
<translation>Gehe zum Kanalbeitrag</translation>
</message>
<message>
<location line="+26"/>
<source>Copy RetroShare Link</source>
<translation>Kopiere RetroShare Link</translation>
</message>
<message>
<location filename="../gui/feeds/ChanMsgItem.cpp" line="-101"/>
<source>Warning! You have less than %1 hours and %2 minute before this file is delted Consider saving it.</source> <source>Warning! You have less than %1 hours and %2 minute before this file is delted Consider saving it.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location line="+96"/> <location line="+95"/>
<source>Hide</source> <source>Hide</source>
<translation>Verbergen</translation> <translation>Verbergen</translation>
</message> </message>
@ -906,7 +920,7 @@ p, li { white-space: pre-wrap; }
<context> <context>
<name>ChanNewItem</name> <name>ChanNewItem</name>
<message> <message>
<location filename="../gui/feeds/ChanNewItem.ui" line="+169"/> <location filename="../gui/feeds/ChanNewItem.ui" line="+189"/>
<source>Remove Item</source> <source>Remove Item</source>
<translation>Eintrag entfernen</translation> <translation>Eintrag entfernen</translation>
</message> </message>
@ -916,7 +930,12 @@ p, li { white-space: pre-wrap; }
<translation>Kanal abonnieren</translation> <translation>Kanal abonnieren</translation>
</message> </message>
<message> <message>
<location line="+20"/> <location line="-20"/>
<source>Go to Channel</source>
<translation>Gehe zum Kanal</translation>
</message>
<message>
<location line="+40"/>
<source>Expand</source> <source>Expand</source>
<translation>Erweitern</translation> <translation>Erweitern</translation>
</message> </message>
@ -1026,9 +1045,9 @@ p, li { white-space: pre-wrap; }
<translation>Alle als gelesen markieren</translation> <translation>Alle als gelesen markieren</translation>
</message> </message>
<message> <message>
<location line="+7"/> <location line="+27"/>
<source>Enable Auto-download</source> <source>Enable Auto-download</source>
<translation type="unfinished"></translation> <translation>Aktiviere Auto-Download</translation>
</message> </message>
<message> <message>
<location line="+88"/> <location line="+88"/>
@ -1036,7 +1055,7 @@ p, li { white-space: pre-wrap; }
<translation>Kanal erstellen</translation> <translation>Kanal erstellen</translation>
</message> </message>
<message> <message>
<location line="-199"/> <location line="-219"/>
<source>Unsubscribe</source> <source>Unsubscribe</source>
<translation>Abbestellen</translation> <translation>Abbestellen</translation>
</message> </message>
@ -1056,7 +1075,7 @@ p, li { white-space: pre-wrap; }
<translation>Kanal abbestellen</translation> <translation>Kanal abbestellen</translation>
</message> </message>
<message> <message>
<location filename="../gui/ChannelFeed.cpp" line="+85"/> <location filename="../gui/ChannelFeed.cpp" line="+84"/>
<source>Own Channels</source> <source>Own Channels</source>
<translation>Meine Kanäle</translation> <translation>Meine Kanäle</translation>
</message> </message>
@ -1107,12 +1126,27 @@ p, li { white-space: pre-wrap; }
<translation>Verteile Kanal</translation> <translation>Verteile Kanal</translation>
</message> </message>
<message> <message>
<location line="+267"/> <location line="+28"/>
<source>Copy RetroShare Link</source>
<translation>Kopiere RetroShare Link</translation>
</message>
<message>
<location line="+257"/>
<source>No Channel Selected</source> <source>No Channel Selected</source>
<translation>Keinen Kanal gewählt</translation> <translation>Keinen Kanal gewählt</translation>
</message> </message>
<message> <message>
<location line="-270"/> <location line="+200"/>
<source>Disable Auto-Download</source>
<translation>Deaktiviere Auto-Download</translation>
</message>
<message>
<location line="+2"/>
<source>Enable Auto-Download</source>
<translation>Aktiviere Auto-Download</translation>
</message>
<message>
<location line="-490"/>
<source>Edit Channel Details</source> <source>Edit Channel Details</source>
<translation>Kanal-Details bearbeiten</translation> <translation>Kanal-Details bearbeiten</translation>
</message> </message>
@ -3329,7 +3363,7 @@ p, li { white-space: pre-wrap; }
<context> <context>
<name>FlatStyle_RDM</name> <name>FlatStyle_RDM</name>
<message> <message>
<location filename="../gui/RemoteDirModel.cpp" line="+653"/> <location filename="../gui/RemoteDirModel.cpp" line="+664"/>
<source>Friends Directories</source> <source>Friends Directories</source>
<translation type="unfinished">Dateien von Freunden</translation> <translation type="unfinished">Dateien von Freunden</translation>
</message> </message>
@ -3510,13 +3544,18 @@ p, li { white-space: pre-wrap; }
</message> </message>
<message> <message>
<location line="+57"/> <location line="+57"/>
<location line="+176"/> <location line="+196"/>
<location line="+161"/> <location line="+161"/>
<source>Subject: </source> <source>Subject: </source>
<translation>Betreff:</translation> <translation>Betreff:</translation>
</message> </message>
<message> <message>
<location line="-278"/> <location line="-298"/>
<source>Go to Forum Message</source>
<translation>Gehe zum Forumbeitrag</translation>
</message>
<message>
<location line="+20"/>
<source>Unsubscribe To Forum</source> <source>Unsubscribe To Forum</source>
<translation>Forum abbestellen</translation> <translation>Forum abbestellen</translation>
</message> </message>
@ -3536,7 +3575,7 @@ p, li { white-space: pre-wrap; }
<translation>Unterzeichnen</translation> <translation>Unterzeichnen</translation>
</message> </message>
<message> <message>
<location filename="../gui/feeds/ForumMsgItem.cpp" line="+89"/> <location filename="../gui/feeds/ForumMsgItem.cpp" line="+91"/>
<source>Forum Post</source> <source>Forum Post</source>
<translation>Beitrag</translation> <translation>Beitrag</translation>
</message> </message>
@ -3558,7 +3597,7 @@ p, li { white-space: pre-wrap; }
<translation>Als Antwort auf</translation> <translation>Als Antwort auf</translation>
</message> </message>
<message> <message>
<location line="+174"/> <location line="+180"/>
<source>Please give a Text Message</source> <source>Please give a Text Message</source>
<translation>Bitte Nachricht eingeben</translation> <translation>Bitte Nachricht eingeben</translation>
</message> </message>
@ -3571,7 +3610,7 @@ p, li { white-space: pre-wrap; }
<translation>Formular</translation> <translation>Formular</translation>
</message> </message>
<message> <message>
<location line="+189"/> <location line="+209"/>
<source>Remove Item</source> <source>Remove Item</source>
<translation>Eintrag entfernen</translation> <translation>Eintrag entfernen</translation>
</message> </message>
@ -3581,7 +3620,12 @@ p, li { white-space: pre-wrap; }
<translation>Forum abonnieren</translation> <translation>Forum abonnieren</translation>
</message> </message>
<message> <message>
<location line="+47"/> <location line="-20"/>
<source>Go to Forum</source>
<translation>Gehe zum Forum</translation>
</message>
<message>
<location line="+67"/>
<source>Expand</source> <source>Expand</source>
<translation>Erweitern</translation> <translation>Erweitern</translation>
</message> </message>
@ -3612,7 +3656,7 @@ p, li { white-space: pre-wrap; }
<context> <context>
<name>ForumsDialog</name> <name>ForumsDialog</name>
<message> <message>
<location filename="../gui/ForumsDialog.cpp" line="+271"/> <location filename="../gui/ForumsDialog.cpp" line="+273"/>
<source>Subscribe to Forum</source> <source>Subscribe to Forum</source>
<translation>Forum abonnieren</translation> <translation>Forum abonnieren</translation>
</message> </message>
@ -3622,7 +3666,7 @@ p, li { white-space: pre-wrap; }
<translation>Forum abbestellen</translation> <translation>Forum abbestellen</translation>
</message> </message>
<message> <message>
<location line="+7"/> <location line="+5"/>
<source>New Forum</source> <source>New Forum</source>
<translation>Neues Forum</translation> <translation>Neues Forum</translation>
</message> </message>
@ -3637,12 +3681,18 @@ p, li { white-space: pre-wrap; }
<translation>Forum-Details bearbeiten</translation> <translation>Forum-Details bearbeiten</translation>
</message> </message>
<message> <message>
<location line="+4"/> <location line="+3"/>
<source>Restore Publish Rights for Forum</source> <source>Restore Publish Rights for Forum</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location line="+8"/> <location line="+6"/>
<location line="+93"/>
<source>Copy RetroShare Link</source>
<translation type="unfinished">Kopiere RetroShare Link</translation>
</message>
<message>
<location line="-88"/>
<source>Mark all as read</source> <source>Mark all as read</source>
<translation>Alle als gelesen markieren</translation> <translation>Alle als gelesen markieren</translation>
</message> </message>
@ -3705,7 +3755,7 @@ p, li { white-space: pre-wrap; }
<translation>keine</translation> <translation>keine</translation>
</message> </message>
<message> <message>
<location line="+508"/> <location line="+542"/>
<location line="+81"/> <location line="+81"/>
<source>RetroShare</source> <source>RetroShare</source>
<translation></translation> <translation></translation>
@ -3721,7 +3771,7 @@ p, li { white-space: pre-wrap; }
<translation>Du kannst einem anonymen Autor nicht antworten</translation> <translation>Du kannst einem anonymen Autor nicht antworten</translation>
</message> </message>
<message> <message>
<location line="-1310"/> <location line="-1344"/>
<source>Your Forums</source> <source>Your Forums</source>
<translation>Deine Foren</translation> <translation>Deine Foren</translation>
</message> </message>
@ -3864,7 +3914,7 @@ p, li { white-space: pre-wrap; }
</message> </message>
<message> <message>
<location filename="../gui/ForumsDialog.cpp" line="+121"/> <location filename="../gui/ForumsDialog.cpp" line="+121"/>
<location line="+1110"/> <location line="+1144"/>
<source>Start New Thread</source> <source>Start New Thread</source>
<translation>Erstelle neues Thema</translation> <translation>Erstelle neues Thema</translation>
</message> </message>
@ -3892,7 +3942,7 @@ p, li { white-space: pre-wrap; }
<translation>Inhalt</translation> <translation>Inhalt</translation>
</message> </message>
<message> <message>
<location filename="../gui/ForumsDialog.cpp" line="-1097"/> <location filename="../gui/ForumsDialog.cpp" line="-1131"/>
<location line="+3"/> <location line="+3"/>
<source>Mark as read</source> <source>Mark as read</source>
<translation>Als gelesen markieren</translation> <translation>Als gelesen markieren</translation>
@ -8833,19 +8883,19 @@ p, li { white-space: pre-wrap; }
<context> <context>
<name>QObject</name> <name>QObject</name>
<message> <message>
<location filename="../main.cpp" line="+84"/> <location filename="../main.cpp" line="+85"/>
<location line="+123"/> <location line="+126"/>
<source>RetroShare</source> <source>RetroShare</source>
<translation>RetroShare</translation> <translation>RetroShare</translation>
</message> </message>
<message> <message>
<location line="-117"/> <location line="-120"/>
<source>Inititialize failed. Wrong or missing installation of gpg.</source> <source>Inititialize failed. Wrong or missing installation of gpg.</source>
<translation>Initialisierung fehlgeschlagen. GPG fehlt oder es ist eine falsche Version installiert.</translation> <translation>Initialisierung fehlgeschlagen. GPG fehlt oder es ist eine falsche Version installiert.</translation>
</message> </message>
<message> <message>
<location line="+5"/> <location line="+5"/>
<location line="+112"/> <location line="+115"/>
<source>An unexpected error occured. Please report &apos;RsInit::InitRetroShare unexpected return code %1&apos;.</source> <source>An unexpected error occured. Please report &apos;RsInit::InitRetroShare unexpected return code %1&apos;.</source>
<translation>Ein unerwarteter Fehler ist aufgetreten. Bitte melde &apos;RsInit::InitRetroShare unexpected return code %1&apos;.</translation> <translation>Ein unerwarteter Fehler ist aufgetreten. Bitte melde &apos;RsInit::InitRetroShare unexpected return code %1&apos;.</translation>
</message> </message>
@ -8892,7 +8942,7 @@ Lockdatei:
<translation>Vielleicht ist das Passwort falsch</translation> <translation>Vielleicht ist das Passwort falsch</translation>
</message> </message>
<message> <message>
<location filename="../gui/RetroShareLink.cpp" line="+366"/> <location filename="../gui/RetroShareLink.cpp" line="+480"/>
<source>File Request Confirmation</source> <source>File Request Confirmation</source>
<translation>Bestätigung der Dateianforderung</translation> <translation>Bestätigung der Dateianforderung</translation>
</message> </message>
@ -8952,7 +9002,43 @@ Lockdatei:
<translation>Der Freund konnte nicht gefunden werden.</translation> <translation>Der Freund konnte nicht gefunden werden.</translation>
</message> </message>
<message> <message>
<location line="+16"/>
<location line="+11"/> <location line="+11"/>
<source>Forum Request canceled</source>
<translation>Forumanfrage abgebrochen</translation>
</message>
<message>
<location line="-11"/>
<source>The forum &quot;%1&quot; could not be found.</source>
<translation>Das Forum &quot;%1&quot; konnte nicht gefunden werden.</translation>
</message>
<message>
<location line="+11"/>
<source>The forum message in forum &quot;%1&quot; could not be found.</source>
<translation>Der Forumbeitrag im Forum &quot;%1&quot; konnte nicht gefunden werden.</translation>
</message>
<message>
<location line="+37"/>
<source>The channel message in channel &quot;%1&quot; could not be found.</source>
<translation>Der Kanalbeitrag im Kanal &quot;%1&quot; konnte nicht gefunden werden.</translation>
</message>
<message>
<source>The forum message could not be found.</source>
<translation type="obsolete">Der Forumbeitrag &quot;%1&quot; konnte nicht gefunden werden.</translation>
</message>
<message>
<location line="-11"/>
<location line="+11"/>
<source>Channel Request canceled</source>
<translation>Kanalanfrage abgebrochen</translation>
</message>
<message>
<location line="-11"/>
<source>The channel &quot;%1&quot; could not be found.</source>
<translation>Der Kanal &quot;%1&quot; konnte nicht gefunden werden.</translation>
</message>
<message>
<location line="+32"/>
<source>File Request Error</source> <source>File Request Error</source>
<translation>Fehler bei der Dateianforderung</translation> <translation>Fehler bei der Dateianforderung</translation>
</message> </message>
@ -8977,12 +9063,11 @@ Lockdatei:
<translation>Nachbar Details</translation> <translation>Nachbar Details</translation>
</message> </message>
<message> <message>
<location filename="../util/EventReceiver.cpp" line="+91"/>
<source>No running instance of RetroShare found.</source> <source>No running instance of RetroShare found.</source>
<translation>Kein laufendes RetroShare gefunden.</translation> <translation type="obsolete">Kein laufendes RetroShare gefunden.</translation>
</message> </message>
<message> <message>
<location line="+33"/> <location filename="../util/EventReceiver.cpp" line="+120"/>
<source>Start with a RetroShare link is only supported for Windows.</source> <source>Start with a RetroShare link is only supported for Windows.</source>
<translation>Der Start mit einem RetroShare Link wird nur unter Windows unterstützt.</translation> <translation>Der Start mit einem RetroShare Link wird nur unter Windows unterstützt.</translation>
</message> </message>
@ -9570,7 +9655,7 @@ p, li { white-space: pre-wrap; }
</message> </message>
<message> <message>
<location line="+319"/> <location line="+319"/>
<location filename="../gui/SearchDialog.cpp" line="+280"/> <location filename="../gui/SearchDialog.cpp" line="+281"/>
<source>Download</source> <source>Download</source>
<translation>Herunterladen</translation> <translation>Herunterladen</translation>
</message> </message>
@ -9610,7 +9695,7 @@ p, li { white-space: pre-wrap; }
<translation>Alle entfernen</translation> <translation>Alle entfernen</translation>
</message> </message>
<message> <message>
<location line="+342"/> <location line="+351"/>
<location line="+68"/> <location line="+68"/>
<source>Folder</source> <source>Folder</source>
<translation>Ordner</translation> <translation>Ordner</translation>
@ -9671,7 +9756,7 @@ p, li { white-space: pre-wrap; }
<translation>Such ID</translation> <translation>Such ID</translation>
</message> </message>
<message> <message>
<location filename="../gui/SearchDialog.cpp" line="-957"/> <location filename="../gui/SearchDialog.cpp" line="-966"/>
<source>Download Notice</source> <source>Download Notice</source>
<translation>Download</translation> <translation>Download</translation>
</message> </message>
@ -10311,7 +10396,7 @@ p, li { white-space: pre-wrap; }
<name>SharedFilesDialog</name> <name>SharedFilesDialog</name>
<message> <message>
<location filename="../gui/SharedFilesDialog.ui" line="+984"/> <location filename="../gui/SharedFilesDialog.ui" line="+984"/>
<location filename="../gui/SharedFilesDialog.cpp" line="+365"/> <location filename="../gui/SharedFilesDialog.cpp" line="+386"/>
<source>Download</source> <source>Download</source>
<translation>Herunterladen</translation> <translation>Herunterladen</translation>
</message> </message>
@ -10394,23 +10479,23 @@ p, li { white-space: pre-wrap; }
<translation>Prüfe Dateien</translation> <translation>Prüfe Dateien</translation>
</message> </message>
<message> <message>
<location filename="../gui/SharedFilesDialog.cpp" line="-133"/> <location filename="../gui/SharedFilesDialog.cpp" line="-154"/>
<location line="+549"/> <location line="+569"/>
<source>Open File</source> <source>Open File</source>
<translation>Datei öffnen</translation> <translation>Datei öffnen</translation>
</message> </message>
<message> <message>
<location line="-547"/> <location line="-567"/>
<source>Open Folder</source> <source>Open Folder</source>
<translation>Ordner öffnen</translation> <translation>Ordner öffnen</translation>
</message> </message>
<message> <message>
<location line="+556"/> <location line="+576"/>
<source>Set command for opening this file</source> <source>Set command for opening this file</source>
<translation>Setze eine Regel zum Öffnen dieser Datei</translation> <translation>Setze eine Regel zum Öffnen dieser Datei</translation>
</message> </message>
<message> <message>
<location line="-420"/> <location line="-419"/>
<source>Copy retroshare Link</source> <source>Copy retroshare Link</source>
<translation>Kopiere RetroShare Link</translation> <translation>Kopiere RetroShare Link</translation>
</message> </message>
@ -10430,7 +10515,7 @@ p, li { white-space: pre-wrap; }
<translation>Sende RetroShare Link</translation> <translation>Sende RetroShare Link</translation>
</message> </message>
<message> <message>
<location line="-155"/> <location line="-176"/>
<source>Copy retroshare Links to Clipboard</source> <source>Copy retroshare Links to Clipboard</source>
<translation>Kopiere RetroShare Links in die Zwischenablage</translation> <translation>Kopiere RetroShare Links in die Zwischenablage</translation>
</message> </message>
@ -10460,13 +10545,13 @@ p, li { white-space: pre-wrap; }
<translation>Füge die Links zur Verknüpfungs-Wolke hinzu</translation> <translation>Füge die Links zur Verknüpfungs-Wolke hinzu</translation>
</message> </message>
<message> <message>
<location line="+151"/> <location line="+172"/>
<location line="+380"/> <location line="+379"/>
<source>Recommend in a message to</source> <source>Recommend in a message to</source>
<translation>Empfehle in einer Nachricht an</translation> <translation>Empfehle in einer Nachricht an</translation>
</message> </message>
<message> <message>
<location line="-254"/> <location line="-253"/>
<location line="+23"/> <location line="+23"/>
<location line="+24"/> <location line="+24"/>
<source>RetroShare Link</source> <source>RetroShare Link</source>
@ -10481,7 +10566,7 @@ p, li { white-space: pre-wrap; }
<translation>Empfehlung(en)</translation> <translation>Empfehlung(en)</translation>
</message> </message>
<message> <message>
<location line="+192"/> <location line="+191"/>
<source>&lt;strong&gt;My Shared Files&lt;/strong&gt;</source> <source>&lt;strong&gt;My Shared Files&lt;/strong&gt;</source>
<translation>&lt;strong&gt;Meine Dateien&lt;/strong&gt;</translation> <translation>&lt;strong&gt;Meine Dateien&lt;/strong&gt;</translation>
</message> </message>