Merge branch 'master' into v0.6-BugFixing_20

This commit is contained in:
csoler 2023-03-21 21:06:58 +01:00 committed by GitHub
commit 8f9d99a232
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
18 changed files with 186 additions and 52 deletions

3
.gitmodules vendored
View File

@ -32,3 +32,6 @@
path = libretroshare
url = ../libretroshare
branch = master
[submodule "retroshare-webui"]
path = retroshare-webui
url = git@github.com:Retroshare/RSNewWebUI

View File

@ -68,6 +68,13 @@ retroshare_plugins {
plugins.target = plugins
}
rs_webui {
SUBDIRS += retroshare-webui
retroshare-webui.file = retroshare-webui/webui.pro
retroshare-webui.target = rs_webui
retroshare-webui.depends = retroshare_gui
}
wikipoos {
SUBDIRS += pegmarkdown
pegmarkdown.file = supportlibs/pegmarkdown/pegmarkdown.pro

View File

@ -357,8 +357,8 @@ void CreateCircleDialog::addMember(const QString& keyId, const QString& idtype,
member->setText(RSCIRCLEID_COL_IDTYPE, idtype);
tree->addTopLevelItem(member);
ui.members_groupBox->setTitle( tr("Invited Members") + " (" + QString::number(ui.treeWidget_membership->topLevelItemCount()) + ")" );
updateMembership();
}
/** Maybe we can use RsGxsCircleGroup instead of RsGxsCircleDetails ??? (TODO)**/
@ -413,6 +413,8 @@ void CreateCircleDialog::removeMember()
// does this just work? (TODO)
delete(item);
updateMembership();
}
void CreateCircleDialog::createCircle()
@ -952,3 +954,8 @@ void CreateCircleDialog::MembershipListCustomPopupMenu( QPoint )
contextMnu.exec(QCursor::pos());
}
void CreateCircleDialog::updateMembership()
{
ui.members_groupBox->setTitle( tr("Invited Members") + " (" + QString::number(ui.treeWidget_membership->topLevelItemCount()) + ")" );
}

View File

@ -56,6 +56,7 @@ private slots:
void filterChanged(const QString &text);
void createNewGxsId();
void idTypeChanged();
void updateMembership();
/** Create the context popup menu and it's submenus */
void IdListCustomPopupMenu( QPoint point );

View File

@ -1628,6 +1628,11 @@ NATStatus *MainWindow::natstatusInstance()
return natstatus;
}
void MainWindow::torstatusReset()
{
if(torstatus != nullptr)
torstatus->reset();
}
DHTStatus *MainWindow::dhtstatusInstance()
{
return dhtstatus;

View File

@ -187,6 +187,7 @@ public:
RSComboBox *statusComboBoxInstance();
PeerStatus *peerstatusInstance();
NATStatus *natstatusInstance();
void torstatusReset();
DHTStatus *dhtstatusInstance();
HashingStatus *hashingstatusInstance();
DiscStatus *discstatusInstance();

View File

@ -29,10 +29,10 @@ PulseMessage::PulseMessage(QWidget *parent)
{
setupUi(this);
connect(label_image1, SIGNAL(clicked()), this, SLOT(viewPicture()));
connect(label_image2, SIGNAL(clicked()), this, SLOT(viewPicture()));
connect(label_image3, SIGNAL(clicked()), this, SLOT(viewPicture()));
connect(label_image4, SIGNAL(clicked()), this, SLOT(viewPicture()));
connect(label_image1, SIGNAL(clicked()), this, SLOT(viewPictureOne()));
connect(label_image2, SIGNAL(clicked()), this, SLOT(viewPictureTwo()));
connect(label_image3, SIGNAL(clicked()), this, SLOT(viewPictureThree()));
connect(label_image4, SIGNAL(clicked()), this, SLOT(viewPictureFour()));
}
void PulseMessage::setup(RsWirePulseSPtr pulse)
@ -148,7 +148,7 @@ void PulseMessage::setRefImageCount(uint32_t count)
}
}
void PulseMessage::viewPicture()
void PulseMessage::viewPictureOne()
{
PhotoView *photoView = new PhotoView(this);
@ -158,21 +158,69 @@ void PulseMessage::viewPicture()
pixmap.loadFromData(mPulse->mImage1.mData, mPulse->mImage1.mSize);
photoView->setPixmap(pixmap);
}
QString timestamp = misc::timeRelativeToNow(mPulse->mRefPublishTs);
photoView->setTitle(QString::fromStdString(mPulse->mPulseText));
photoView->setGroupNameString(QString::fromStdString(mPulse->mRefGroupName));
photoView->setTime(timestamp);
//photoView->setGroupId(mPulse->mRefGroupId);
photoView->show();
/* window will destroy itself! */
}
void PulseMessage::viewPictureTwo()
{
PhotoView *photoView = new PhotoView(this);
if (!mPulse->mImage2.empty()) {
// install image.
QPixmap pixmap;
pixmap.loadFromData(mPulse->mImage2.mData, mPulse->mImage2.mSize);
photoView->setPixmap(pixmap);
}
QString timestamp = misc::timeRelativeToNow(mPulse->mRefPublishTs);
photoView->setTitle(QString::fromStdString(mPulse->mPulseText));
photoView->setGroupNameString(QString::fromStdString(mPulse->mRefGroupName));
photoView->setTime(timestamp);
//photoView->setGroupId(mPulse->mRefGroupId);
photoView->show();
/* window will destroy itself! */
}
void PulseMessage::viewPictureThree()
{
PhotoView *photoView = new PhotoView(this);
if (!mPulse->mImage3.empty()) {
// install image.
QPixmap pixmap;
pixmap.loadFromData(mPulse->mImage3.mData, mPulse->mImage3.mSize);
photoView->setPixmap(pixmap);
}
QString timestamp = misc::timeRelativeToNow(mPulse->mRefPublishTs);
photoView->setTitle(QString::fromStdString(mPulse->mPulseText));
photoView->setGroupNameString(QString::fromStdString(mPulse->mRefGroupName));
photoView->setTime(timestamp);
//photoView->setGroupId(mPulse->mRefGroupId);
photoView->show();
/* window will destroy itself! */
}
void PulseMessage::viewPictureFour()
{
PhotoView *photoView = new PhotoView(this);
if (!mPulse->mImage4.empty()) {
// install image.
QPixmap pixmap;

View File

@ -37,7 +37,10 @@ public:
void setRefImageCount(uint32_t count);
private slots:
void viewPicture();
void viewPictureOne();
void viewPictureTwo();
void viewPictureThree();
void viewPictureFour();
private:
RsWirePulseSPtr mPulse;

View File

@ -51,7 +51,7 @@ static QHash<QString, QPixmap> iconcache;
void Emoticons::load()
{
loadSmiley();
filters << "*.png" << "*.jpg" << "*.gif" << "*.webp";
filters << "*.png" << "*.jpg" << "*.jpeg" << "*.gif" << "*.webp";
stickerFolders << (QString::fromStdString(RsAccounts::AccountDirectory()) + "/stickers"); //under account, unique for user
stickerFolders << (QString::fromStdString(RsAccounts::ConfigDirectory()) + "/stickers"); //under .retroshare, shared between users
stickerFolders << (QString::fromStdString(RsAccounts::systemDataDirectory()) + "/stickers"); //exe's folder, shipped with RS

View File

@ -33,8 +33,8 @@
#include "retroshare/rsfiles.h"
GxsChannelFilesStatusWidget::GxsChannelFilesStatusWidget(const RsGxsFile &file, QWidget *parent) :
QWidget(parent), mFile(file), ui(new Ui::GxsChannelFilesStatusWidget)
GxsChannelFilesStatusWidget::GxsChannelFilesStatusWidget(const RsGxsFile &file, QWidget *parent,bool used_as_editor) :
QWidget(parent), mFile(file), mUsedAsEditor(used_as_editor),ui(new Ui::GxsChannelFilesStatusWidget)
{
ui->setupUi(this);
@ -46,7 +46,7 @@ GxsChannelFilesStatusWidget::GxsChannelFilesStatusWidget(const RsGxsFile &file,
connect(ui->downloadPushButton, SIGNAL(clicked()), this, SLOT(download()));
connect(ui->resumeToolButton, SIGNAL(clicked()), this, SLOT(resume()));
connect(ui->pauseToolButton, SIGNAL(clicked()), this, SLOT(pause()));
connect(ui->cancelToolButton, SIGNAL(clicked()), this, SLOT(cancel()));
connect(ui->cancelToolButton, SIGNAL(clicked()), this, SLOT(cancel()));
connect(ui->openFilePushButton, SIGNAL(clicked()), this, SLOT(openFile()));
ui->downloadPushButton->setIcon(FilesDefs::getIconFromQtResourcePath(":/icons/png/download.png"));
@ -306,14 +306,19 @@ void GxsChannelFilesStatusWidget::resume()
void GxsChannelFilesStatusWidget::cancel()
{
if ((QMessageBox::question(this, "", tr("Are you sure that you want to cancel and delete the file?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::No)) == QMessageBox::No) {
return;
}
// When QMessgeBox asks for cancel confirmtion, this makes the widget lose focus => since it is an editor widget,
// it gets destroyed by the parent list widget => subsequent code after the QMessageBox runs over a deleted object => crash
// In summary: no QMessageBox here when the Status widget is used as an editor.
if(!mUsedAsEditor)
if ((QMessageBox::question(this, "", tr("Are you sure that you want to cancel and delete the file?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::No)) == QMessageBox::No) {
return;
}
rsFiles->FileCancel(mFile.mHash);
emit onButtonClick();// Signals the parent widget to e.g. update the downloadable file count
check();
check();
}
void GxsChannelFilesStatusWidget::openFolder()
@ -327,8 +332,12 @@ void GxsChannelFilesStatusWidget::openFolder()
QDir dir = QFileInfo(QString::fromUtf8(fileInfo.path.c_str())).absoluteDir();
if (dir.exists()) {
if (!RsUrlHandler::openUrl(QUrl::fromLocalFile(dir.absolutePath()))) {
QMessageBox::warning(this, "", QString("%1 %2").arg(tr("Can't open folder"), dir.absolutePath()));
}
if(!mUsedAsEditor)
QMessageBox::warning(this, "", QString("%1 %2").arg(tr("Can't open folder"), dir.absolutePath()));
else
RsErr() << "Can't open folder " << dir.absolutePath().toStdString() ;
}
}
}
@ -347,8 +356,12 @@ void GxsChannelFilesStatusWidget::openFile()
std::cerr << "GxsChannelFilesStatusWidget(): can't open file " << fileInfo.path << std::endl;
}
}else{
QMessageBox::information(this, tr("Play File"),
tr("File %1 does not exist at location.").arg(fileInfo.path.c_str()));
return;
if(!mUsedAsEditor)
QMessageBox::information(this, tr("Play File"),
tr("File %1 does not exist at location.").arg(fileInfo.path.c_str()));
else
RsErr() << "File " << fileInfo.path << " does not exist at location." ;
return;
}
}

View File

@ -34,9 +34,10 @@ class GxsChannelFilesStatusWidget : public QWidget
Q_OBJECT
public:
explicit GxsChannelFilesStatusWidget(const RsGxsFile &file, QWidget *parent = 0);
explicit GxsChannelFilesStatusWidget(const RsGxsFile &file, QWidget *parent = 0,bool used_as_editor=false);
~GxsChannelFilesStatusWidget();
bool usedAsEditor() const { return mUsedAsEditor; }
signals:
void onButtonClick();
@ -73,6 +74,8 @@ private:
uint64_t mSize;
uint64_t mDivisor;
bool mUsedAsEditor;
Ui::GxsChannelFilesStatusWidget *ui;
};

View File

@ -295,7 +295,7 @@ void RsGxsChannelPostFilesModel::setFilter(const QStringList& strings, uint32_t&
{
preMods();
initEmptyHierarchy();
mFilteredFiles.clear();
if(strings.empty())
{
@ -317,8 +317,6 @@ void RsGxsChannelPostFilesModel::setFilter(const QStringList& strings, uint32_t&
}
count = mFilteredFiles.size();
std::cerr << "After filtering: " << count << " posts remain." << std::endl;
if (rowCount()>0)
{
beginInsertRows(QModelIndex(),0,rowCount()-1);

View File

@ -280,16 +280,18 @@ void ChannelPostDelegate::setWidgetGrid(bool use_grid)
QWidget *ChannelPostFilesDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &/*option*/, const QModelIndex& index) const
{
ChannelPostFileInfo file = index.data(Qt::UserRole).value<ChannelPostFileInfo>() ;
ChannelPostFileInfo file = index.data(Qt::UserRole).value<ChannelPostFileInfo>() ;
if(index.column() == RsGxsChannelPostFilesModel::COLUMN_FILES_FILE)
{
GxsChannelFilesStatusWidget* w = new GxsChannelFilesStatusWidget(file,parent);
if(index.column() == RsGxsChannelPostFilesModel::COLUMN_FILES_FILE)
{
GxsChannelFilesStatusWidget* w = new GxsChannelFilesStatusWidget(file,parent,true);
w->setFocusPolicy(Qt::StrongFocus);
connect(w,SIGNAL(onButtonClick()),this->parent(),SLOT(updateDAll_PB()));
return w;
}
else
return NULL;
return w;
}
else
return NULL;
}
void ChannelPostFilesDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &/* index */) const
{
@ -416,6 +418,8 @@ GxsChannelPostsWidgetWithModel::GxsChannelPostsWidgetWithModel(const RsGxsGroupI
connect(ui->postsTree->selectionModel(),SIGNAL(selectionChanged(const QItemSelection&,const QItemSelection&)),this,SLOT(showPostDetails()));
connect(ui->postsTree,SIGNAL(customContextMenuRequested(const QPoint&)),this,SLOT(postContextMenu(const QPoint&)));
connect(ui->channel_TW,SIGNAL(currentChanged(int)),this,SLOT(currentTabChanged(int)));
connect(mChannelPostsModel,SIGNAL(channelPostsLoaded()),this,SLOT(postChannelPostLoad()));
ui->postName_LB->hide();
@ -501,6 +505,22 @@ GxsChannelPostsWidgetWithModel::GxsChannelPostsWidgetWithModel(const RsGxsGroupI
}, mEventHandlerId, RsEventType::GXS_CHANNELS );
}
void GxsChannelPostsWidgetWithModel::currentTabChanged(int t)
{
switch(t)
{
case CHANNEL_TABS_DETAILS:
case CHANNEL_TABS_FILES:
ui->showUnread_TB->setHidden(true);
ui->viewType_TB->setHidden(true);
break;
case CHANNEL_TABS_POSTS:
ui->showUnread_TB->setHidden(false);
ui->viewType_TB->setHidden(false);
break;
}
}
void GxsChannelPostsWidgetWithModel::updateZoomFactor(bool zoom_or_unzoom)
{
mChannelPostsDelegate->zoom(zoom_or_unzoom);

View File

@ -47,7 +47,7 @@ class ChannelPostFilesDelegate: public QStyledItemDelegate
Q_OBJECT
public:
ChannelPostFilesDelegate(QObject *parent=0) : QStyledItemDelegate(parent){}
ChannelPostFilesDelegate(QObject *parent=0) : QStyledItemDelegate(parent){}
virtual ~ChannelPostFilesDelegate(){}
void paint(QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index) const override;
@ -160,6 +160,7 @@ private slots:
void markMessageUnread();
public slots:
void currentTabChanged(int t);
void sortColumnFiles(int col,Qt::SortOrder so);
void sortColumnPostFiles(int col,Qt::SortOrder so);
void updateCommentsCount(int n);

View File

@ -387,12 +387,11 @@ void RsMessageModel::setFilter(FilterType filter_type, const QStringList& string
std::cerr << std::endl;
#endif
preMods();
mFilterType = filter_type;
mFilterStrings = strings;
postMods();
if(rowCount() > 0)
emit dataChanged(createIndex(0,0),createIndex(rowCount()-1,RsMessageModel::columnCount()-1));
}
QVariant RsMessageModel::toolTipRole(const Rs::Msgs::MsgInfoSummary& fmpe,int column) const

View File

@ -21,6 +21,7 @@
#include "ServerPage.h"
#include <gui/notifyqt.h>
#include "gui/MainWindow.h"
#include "rshare.h"
#include "rsharesettings.h"
#include "util/i2pcommon.h"
@ -1366,6 +1367,7 @@ void ServerPage::saveAddressesHiddenNode()
void ServerPage::updateOutProxyIndicator()
{
MainWindow::getInstance()->torstatusReset();
QTcpSocket socket ;
// Tor
@ -1382,22 +1384,39 @@ void ServerPage::updateOutProxyIndicator()
ui.iconlabel_tor_outgoing->setToolTip(tr("Tor proxy is not enabled")) ;
}
// I2P - SAM
// Note: there is only "the SAM port", there is no additional proxy port!
samStatus ss;
rsAutoProxyMonitor::taskSync(autoProxyType::I2PSAM3, autoProxyTask::status, &ss);
if(ss.state == samStatus::samState::online)
if (mHiddenType == RS_HIDDEN_TYPE_I2P && mSamSettings.enable)
{
socket.disconnectFromHost();
ui.iconlabel_i2p_outgoing->setPixmap(FilesDefs::getPixmapFromQtResourcePath(ICON_STATUS_OK)) ;
ui.iconlabel_i2p_outgoing->setToolTip(tr("Proxy seems to work.")) ;
// I2P - SAM
// Note: there is only "the SAM port", there is no additional proxy port!
samStatus ss;
rsAutoProxyMonitor::taskSync(autoProxyType::I2PSAM3, autoProxyTask::status, &ss);
if(ss.state == samStatus::samState::online)
{
socket.disconnectFromHost();
ui.iconlabel_i2p_outgoing->setPixmap(FilesDefs::getPixmapFromQtResourcePath(ICON_STATUS_OK)) ;
ui.iconlabel_i2p_outgoing->setToolTip(tr("Proxy seems to work.")) ;
}
else
{
ui.iconlabel_i2p_outgoing->setPixmap(FilesDefs::getPixmapFromQtResourcePath(ICON_STATUS_UNKNOWN)) ;
ui.iconlabel_i2p_outgoing->setToolTip(tr("I2P proxy is not enabled")) ;
}
}
else
{
ui.iconlabel_i2p_outgoing->setPixmap(FilesDefs::getPixmapFromQtResourcePath(ICON_STATUS_UNKNOWN)) ;
ui.iconlabel_i2p_outgoing->setToolTip(tr("I2P proxy is not enabled")) ;
socket.connectToHost(ui.hiddenpage_proxyAddress_i2p->text(),ui.hiddenpage_proxyPort_i2p->text().toInt());
if(socket.waitForConnected(500))
{
socket.disconnectFromHost();
ui.iconlabel_i2p_outgoing->setPixmap(FilesDefs::getPixmapFromQtResourcePath(ICON_STATUS_OK)) ;
ui.iconlabel_i2p_outgoing->setToolTip(tr("Proxy seems to work.")) ;
}
else
{
ui.iconlabel_i2p_outgoing->setPixmap(FilesDefs::getPixmapFromQtResourcePath(ICON_STATUS_UNKNOWN)) ;
ui.iconlabel_i2p_outgoing->setToolTip(tr("I2P proxy is not enabled")) ;
}
}
socket.connectToHost(ui.hiddenpage_proxyAddress_i2p_2->text(), 7656);
if(true == (mSamAccessible = socket.waitForConnected(1000)))
{

View File

@ -168,7 +168,7 @@ void TorStatus::getTorStatus()
torstatusLabel->setToolTip( text + tr("Tor proxy is not available"));
}
}
if(hiddentype == RS_HIDDEN_TYPE_I2P)
else if(hiddentype == RS_HIDDEN_TYPE_I2P)
{
statusTor->setText("<strong>" + tr("I2P") + ":</strong>");
rsPeers->getProxyServer(RS_HIDDEN_TYPE_I2P, proxyaddr, proxyport, status);
@ -185,6 +185,11 @@ void TorStatus::getTorStatus()
torstatusLabel->setToolTip( text + tr("i2p proxy is not available"));
}
}
else
{
torstatusLabel->setPixmap(FilesDefs::getPixmapFromQtResourcePath(":/icons/tile_inactive_48.png").scaledToHeight(S,Qt::SmoothTransformation));
torstatusLabel->setToolTip(tr("No tor configuration"));
}
_updated = true;
}
}

1
retroshare-webui Submodule

@ -0,0 +1 @@
Subproject commit a593b9c808f90cce7d47a5de86c207ef8675945f