- Added copy link to GxsFeedItem (GxsChannelPostItem)

- Fixed copy link of GxsGroupFrameDialog
  - utf8 issue
  - removed unread message count from group name

git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@7476 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
thunder2 2014-07-26 23:52:45 +00:00
parent 8427c92486
commit 3458cdc8fc
12 changed files with 112 additions and 182 deletions

View file

@ -175,6 +175,11 @@ RsPostedPost &PostedItem::post()
return mPost; return mPost;
} }
QString PostedItem::messageName()
{
return QString::fromUtf8(mPost.mMeta.mMsgName.c_str());
}
void PostedItem::makeDownVote() void PostedItem::makeDownVote()
{ {
RsGxsGrpMsgIdPair msgId; RsGxsGrpMsgIdPair msgId;

View file

@ -53,6 +53,8 @@ signals:
protected: protected:
virtual void loadMessage(const uint32_t &token); virtual void loadMessage(const uint32_t &token);
virtual RetroShareLink::enumType getLinkType() { return RetroShareLink::TYPE_UNKNOWN; }
virtual QString messageName();
private: private:
void setup(); void setup();

View file

@ -408,93 +408,37 @@ bool RetroShareLink::createUnknwonSslCertificate(const RsPeerId& sslId, const Rs
return false; return false;
} }
bool RetroShareLink::createForum(const std::string& id, const std::string& msgId) bool RetroShareLink::createGxsGroupLink(const RetroShareLink::enumType &linkType, const RsGxsGroupId &groupId, const QString &groupName)
{ {
clear(); clear();
#if 0 if (!groupId.isNull()) {
if (!id.empty()) { _hash = QString::fromStdString(groupId.toStdString());
_hash = QString::fromStdString(id); _type = linkType;
_msgId = QString::fromStdString(msgId); _name = groupName;
_type = TYPE_FORUM;
if (msgId.empty()) {
ForumInfo fi;
if (rsForums->getForumInfo(id, fi)) {
_name = QString::fromStdWString(fi.forumName);
}
} else {
ForumMsgInfo mi;
if (rsForums->getForumMessage(id, msgId, mi)) {
_name = ForumsDialog::titleFromInfo(mi);
}
}
} }
#endif
check(); check();
return valid(); return valid();
} }
bool RetroShareLink::createChannel(const std::string &id, const std::string &msgId) bool RetroShareLink::createGxsMessageLink(const RetroShareLink::enumType &linkType, const RsGxsGroupId &groupId, const RsGxsMessageId &msgId, const QString &msgName)
{ {
clear(); clear();
#if 0 if (!groupId.isNull() && !msgId.isNull()) {
if (!id.empty()) { _hash = QString::fromStdString(groupId.toStdString());
_hash = QString::fromStdString(id); _msgId = QString::fromStdString(msgId.toStdString());
_msgId = QString::fromStdString(msgId); _type = linkType;
_name = msgName;
_type = TYPE_CHANNEL;
if (msgId.empty()) {
ChannelInfo ci;
if (rsChannels->getChannelInfo(id, ci)) {
_name = QString::fromStdWString(ci.channelName);
}
} else {
ChannelMsgInfo mi;
if (rsChannels->getChannelMessage(id, msgId, mi)) {
_name = QString::fromStdWString(mi.subject);
}
}
} }
#endif
check(); check();
return valid(); return valid();
} }
bool RetroShareLink::createGxsLink(const RsGxsGroupId &id, const RsGxsMessageId &msgId,
const std::string& groupName, const std::string& msgSubject,
const RetroShareLink::enumType &linkType)
{
clear();
if (!id.isNull()) {
_hash = QString::fromStdString(id.toStdString());
if(!msgId.isNull())
_msgId = QString::fromStdString(msgId.toStdString());
_type = linkType;
if (msgId.isNull()) {
_name = QString::fromStdString(groupName);
} else {
_name = QString::fromStdString(msgSubject);
}
}
check();
return valid();
}
bool RetroShareLink::createSearch(const QString& keywords) bool RetroShareLink::createSearch(const QString& keywords)
{ {
clear(); clear();

View file

@ -56,17 +56,18 @@
class RetroShareLink class RetroShareLink
{ {
public: public:
enum enumType { TYPE_UNKNOWN = 0x00, enum enumType {
TYPE_FILE = 0x01, TYPE_UNKNOWN = 0x00,
TYPE_PERSON = 0x02, TYPE_FILE = 0x01,
TYPE_FORUM = 0x03, TYPE_PERSON = 0x02,
TYPE_CHANNEL = 0x04, TYPE_FORUM = 0x03,
TYPE_SEARCH = 0x05, TYPE_CHANNEL = 0x04,
TYPE_MESSAGE = 0x06, TYPE_SEARCH = 0x05,
TYPE_CERTIFICATE = 0x07, TYPE_MESSAGE = 0x06,
TYPE_EXTRAFILE = 0x08, TYPE_CERTIFICATE = 0x07,
TYPE_PRIVATE_CHAT = 0x09, TYPE_EXTRAFILE = 0x08,
TYPE_PUBLIC_MSG = 0x0a TYPE_PRIVATE_CHAT = 0x09,
TYPE_PUBLIC_MSG = 0x0a
}; };
public: public:
@ -76,18 +77,15 @@ class RetroShareLink
bool createFile(const QString& name, uint64_t size, const QString& hash); bool createFile(const QString& name, uint64_t size, const QString& hash);
bool createExtraFile(const QString& name, uint64_t size, const QString& hash, const QString& ssl_id); bool createExtraFile(const QString& name, uint64_t size, const QString& hash, const QString& ssl_id);
bool createPerson(const RsPgpId &id); bool createPerson(const RsPgpId &id);
bool createForum(const std::string& id, const std::string& msgId); bool createGxsGroupLink(const RetroShareLink::enumType &linkType, const RsGxsGroupId &groupId, const QString &groupName);
bool createChannel(const std::string& id, const std::string& msgId); bool createGxsMessageLink(const RetroShareLink::enumType &linkType, const RsGxsGroupId &groupId, const RsGxsMessageId &msgId, const QString &msgName);
bool createGxsLink(const RsGxsGroupId &id, const RsGxsMessageId &msgId,
const std::string& groupName, const std::string& msgSubject,
const RetroShareLink::enumType &linkType);
bool createSearch(const QString& keywords); bool createSearch(const QString& keywords);
bool createMessage(const RsPeerId &peerId, const QString& subject); bool createMessage(const RsPeerId &peerId, const QString& subject);
bool createMessage(const RsGxsId &peerId, const QString& subject); bool createMessage(const RsGxsId &peerId, const QString& subject);
bool createCertificate(const RsPeerId &ssl_id) ; bool createCertificate(const RsPeerId &ssl_id) ;
bool createPublicMsgInvite(time_t time_stamp,const QString& pgp_id,const QString& hash) ; bool createPublicMsgInvite(time_t time_stamp,const QString& pgp_id,const QString& hash) ;
bool createUnknwonSslCertificate(const RsPeerId &sslId, const RsPgpId &gpgId = RsPgpId()) ; bool createUnknwonSslCertificate(const RsPeerId &sslId, const RsPgpId &gpgId = RsPgpId()) ;
enumType type() const {return _type; } enumType type() const {return _type; }
uint64_t size() const { return _size ; } uint64_t size() const { return _size ; }

View file

@ -297,22 +297,22 @@ QString GroupTreeWidget::itemId(QTreeWidgetItem *item)
return ""; return "";
} }
return item->data(COLUMN_DATA, ROLE_ID).toString(); return item->data(COLUMN_DATA, ROLE_ID).toString();
} }
QString GroupTreeWidget::itemIdAt(QPoint &point) QString GroupTreeWidget::itemIdAt(QPoint &point)
{ {
QTreeWidgetItem *item = ui->treeWidget->itemAt(point); QTreeWidgetItem *item = ui->treeWidget->itemAt(point);
if (item == NULL) { if (item == NULL) {
return ""; return "";
} }
return item->data(COLUMN_DATA, ROLE_ID).toString(); return item->data(COLUMN_DATA, ROLE_ID).toString();
} }
void GroupTreeWidget::fillGroupItems(QTreeWidgetItem *categoryItem, const QList<GroupItemInfo> &itemList) void GroupTreeWidget::fillGroupItems(QTreeWidgetItem *categoryItem, const QList<GroupItemInfo> &itemList)
{ {
if (categoryItem == NULL) { if (categoryItem == NULL) {
return; return;
} }
@ -423,7 +423,6 @@ void GroupTreeWidget::setUnreadCount(QTreeWidgetItem *item, int unreadCount)
item->setText(COLUMN_NAME, name); item->setText(COLUMN_NAME, name);
item->setFont(COLUMN_NAME, font); item->setFont(COLUMN_NAME, font);
} }
QTreeWidgetItem *GroupTreeWidget::getItemFromId(const QString &id) QTreeWidgetItem *GroupTreeWidget::getItemFromId(const QString &id)
@ -467,19 +466,16 @@ RSTreeWidget *GroupTreeWidget::treeWidget()
return ui->treeWidget; return ui->treeWidget;
} }
bool GroupTreeWidget::getGroupName(QString id, QTreeWidgetItem* categoryItem, QString& name) bool GroupTreeWidget::getGroupName(QString id, QString& name)
{ {
int childCount = categoryItem->childCount(); QTreeWidgetItem *item = getItemFromId(id);
for (int child = 0; child < childCount; child++) { if (item == NULL) {
QTreeWidgetItem *childItem = categoryItem->child(child); return false;
if (childItem->data(COLUMN_DATA, ROLE_ID).toString() == id) { }
/* Found child */
name = childItem->text(COLUMN_NAME); name = item->data(COLUMN_DATA, ROLE_NAME).toString();
return true;
} return true;
}
return false;
} }
int GroupTreeWidget::subscribeFlags(const QString &id) int GroupTreeWidget::subscribeFlags(const QString &id)

View file

@ -80,13 +80,13 @@ public:
void processSettings(RshareSettings *settings, bool load); void processSettings(RshareSettings *settings, bool load);
// Add a new category item // Add a new category item
QTreeWidgetItem *addCategoryItem(const QString &name, const QIcon &icon, bool expand); QTreeWidgetItem *addCategoryItem(const QString &name, const QIcon &icon, bool expand);
// Get id of item // Get id of item
QString itemId(QTreeWidgetItem *item); QString itemId(QTreeWidgetItem *item);
QString itemIdAt(QPoint &point); QString itemIdAt(QPoint &point);
// Fill items of a group // Fill items of a group
void fillGroupItems(QTreeWidgetItem *categoryItem, const QList<GroupItemInfo> &itemList); void fillGroupItems(QTreeWidgetItem *categoryItem, const QList<GroupItemInfo> &itemList);
// 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 *getItemFromId(const QString &id);
@ -99,7 +99,7 @@ public:
void setTextColorCategory(QColor color) { mTextColor[GROUPTREEWIDGET_COLOR_CATEGORY] = color; } void setTextColorCategory(QColor color) { mTextColor[GROUPTREEWIDGET_COLOR_CATEGORY] = color; }
void setTextColorPrivateKey(QColor color) { mTextColor[GROUPTREEWIDGET_COLOR_PRIVATEKEY] = color; } void setTextColorPrivateKey(QColor color) { mTextColor[GROUPTREEWIDGET_COLOR_PRIVATEKEY] = color; }
bool getGroupName(QString id, QTreeWidgetItem* item, QString& name); bool getGroupName(QString id, QString& name);
int subscribeFlags(const QString &id); int subscribeFlags(const QString &id);

View file

@ -189,11 +189,11 @@ void GxsChannelPostItem::loadPost(const RsGxsChannelPost &post)
{ {
title = tr("Channel Feed") + ": "; title = tr("Channel Feed") + ": ";
RetroShareLink link; RetroShareLink link;
link.createChannel(post.mMeta.mGroupId.toStdString(), ""); link.createGxsGroupLink(RetroShareLink::TYPE_CHANNEL, post.mMeta.mGroupId, "");
title += link.toHtml(); title += link.toHtml();
ui->titleLabel->setText(title); ui->titleLabel->setText(title);
RetroShareLink msgLink; RetroShareLink msgLink;
msgLink.createChannel(post.mMeta.mGroupId.toStdString(), post.mMeta.mMsgId.toStdString()); msgLink.createGxsMessageLink(RetroShareLink::TYPE_CHANNEL, post.mMeta.mGroupId, post.mMeta.mMsgId, QString::fromUtf8(post.mMeta.mMsgName.c_str()));
ui->subjectLabel->setText(msgLink.toHtml()); ui->subjectLabel->setText(msgLink.toHtml());
if (IS_GROUP_SUBSCRIBED(mSubscribeFlags) || IS_GROUP_ADMIN(mSubscribeFlags)) if (IS_GROUP_SUBSCRIBED(mSubscribeFlags) || IS_GROUP_ADMIN(mSubscribeFlags))
@ -314,6 +314,11 @@ void GxsChannelPostItem::loadPost(const RsGxsChannelPost &post)
mInUpdateItemStatic = false; mInUpdateItemStatic = false;
} }
QString GxsChannelPostItem::messageName()
{
return QString::fromUtf8(mPost.mMeta.mMsgName.c_str());
}
void GxsChannelPostItem::setReadStatus(bool isNew, bool isUnread) void GxsChannelPostItem::setReadStatus(bool isNew, bool isUnread)
{ {
if (isUnread) if (isUnread)
@ -536,25 +541,6 @@ void GxsChannelPostItem::channelMsgReadSatusChanged(const QString& channelId, co
#endif #endif
} }
void GxsChannelPostItem::copyLink()
{
#if 0
if (mChanId.empty() || mMsgId.empty()) {
return;
}
ChannelMsgInfo cmi;
if (rsChannels->getChannelMessage(mChanId, mMsgId, cmi)) {
RetroShareLink link;
if (link.createChannel(cmi.channelId, cmi.msgId)) {
QList<RetroShareLink> urls;
urls.push_back(link);
RSLinkClipboard::copyLinks(urls);
}
}
#endif
}
void GxsChannelPostItem::makeDownVote() void GxsChannelPostItem::makeDownVote()
{ {
RsGxsGrpMsgIdPair msgId; RsGxsGrpMsgIdPair msgId;

View file

@ -55,6 +55,8 @@ public:
protected: protected:
virtual void loadMessage(const uint32_t &token); virtual void loadMessage(const uint32_t &token);
virtual RetroShareLink::enumType getLinkType() { return RetroShareLink::TYPE_CHANNEL; }
virtual QString messageName();
private slots: private slots:
/* default stuff */ /* default stuff */
@ -62,7 +64,6 @@ private slots:
void readAndClearItem(); void readAndClearItem();
void download(); void download();
void play(); void play();
void copyLink();
void loadComments(); void loadComments();
void readToggled(bool checked); void readToggled(bool checked);

View file

@ -97,6 +97,24 @@ void GxsFeedItem::subscribe()
} }
} }
void GxsFeedItem::copyLink()
{
if (mGroupId.isNull() || mMessageId.isNull()) {
return;
}
if (getLinkType() == RetroShareLink::TYPE_UNKNOWN) {
return;
}
RetroShareLink link;
if (link.createGxsMessageLink(getLinkType(), mGroupId, mMessageId, messageName())) {
QList<RetroShareLink> urls;
urls.push_back(link);
RSLinkClipboard::copyLinks(urls);
}
}
void GxsFeedItem::updateItemStatic() void GxsFeedItem::updateItemStatic()
{ {
std::cerr << "GxsFeedItem::updateItemStatic()"; std::cerr << "GxsFeedItem::updateItemStatic()";

View file

@ -26,6 +26,8 @@
#include <retroshare/rsgxsifacehelper.h> #include <retroshare/rsgxsifacehelper.h>
#include "util/TokenQueue.h" #include "util/TokenQueue.h"
#include "gui/RetroShareLink.h"
#include <stdint.h> #include <stdint.h>
class FeedHolder; class FeedHolder;
@ -54,6 +56,9 @@ protected:
virtual void loadGroupMeta(const uint32_t &token); virtual void loadGroupMeta(const uint32_t &token);
virtual void loadRequest(const TokenQueue *queue, const TokenRequest &req); virtual void loadRequest(const TokenQueue *queue, const TokenRequest &req);
virtual RetroShareLink::enumType getLinkType() = 0;
virtual QString messageName() = 0;
// general fns that can be implemented here. // general fns that can be implemented here.
protected slots: protected slots:
@ -61,6 +66,7 @@ protected slots:
void subscribe(); void subscribe();
void unsubscribe(); void unsubscribe();
void removeItem(); void removeItem();
void copyLink();
private slots: private slots:
/* RsGxsUpdateBroadcastBase */ /* RsGxsUpdateBroadcastBase */
@ -85,4 +91,3 @@ private:
}; };
#endif #endif

View file

@ -386,48 +386,23 @@ void GxsGroupFrameDialog::copyGroupLink()
return; return;
} }
RetroShareLink link; RetroShareLink link;
QString name; QString name;
if(!getCurrentGroupName(name)) return; if(!getCurrentGroupName(name)) return;
if (link.createGxsLink(mGroupId, RsGxsMessageId(), name.toStdString(), "", getLinkType())) { if (link.createGxsGroupLink(getLinkType(), mGroupId, name)) {
QList<RetroShareLink> urls; QList<RetroShareLink> urls;
urls.push_back(link); urls.push_back(link);
RSLinkClipboard::copyLinks(urls); RSLinkClipboard::copyLinks(urls);
} }
} }
bool GxsGroupFrameDialog::getCurrentGroupName(QString& name) bool GxsGroupFrameDialog::getCurrentGroupName(QString& name)
{ {
GroupTreeWidget* gtw = ui->groupTreeWidget; return ui->groupTreeWidget->getGroupName(QString::fromStdString(mGroupId.toStdString()), name);
QString id = QString::fromStdString(mGroupId.toStdString());
if(gtw->getGroupName(id, mYourGroups, name))
{
return true;
}
else if(gtw->getGroupName(id, mSubscribedGroups, name))
{
return true;
}
else if(gtw->getGroupName(id, mYourGroups, name))
{
return true;
}
else if(gtw->getGroupName(id, mOtherGroups, name))
{
return true;
}
return false;
} }
void GxsGroupFrameDialog::markMsgAsRead() void GxsGroupFrameDialog::markMsgAsRead()
{ {
GxsMessageFrameWidget *msgWidget = messageWidget(mGroupId, false); GxsMessageFrameWidget *msgWidget = messageWidget(mGroupId, false);

View file

@ -73,7 +73,7 @@ public:
GxsGroupFrameDialog(RsGxsIfaceHelper *ifaceImpl, QWidget *parent = 0); GxsGroupFrameDialog(RsGxsIfaceHelper *ifaceImpl, QWidget *parent = 0);
~GxsGroupFrameDialog(); ~GxsGroupFrameDialog();
bool navigate(const RsGxsGroupId groupId, const RsGxsMessageId& msgId); bool navigate(const RsGxsGroupId groupId, const RsGxsMessageId& msgId);
// Callback for all Loads. // Callback for all Loads.
virtual void loadRequest(const TokenQueue *queue, const TokenRequest &req); virtual void loadRequest(const TokenQueue *queue, const TokenRequest &req);