This is an automated email from the git hooks/post-receive script. x2go pushed a change to branch master in repository x2goclient. from a77b149 Display state of broker connection in status bar. new 15f7c78 Client can synchronize sessions with broker. Broker need to send syncinterval value in the client config section. The 1 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Summary of changes: debian/changelog | 2 ++ src/httpbrokerclient.cpp | 13 +++++--- src/onmainwindow.cpp | 51 ++++++++++++++++++---------- src/onmainwindow.h | 8 +++-- src/sessionbutton.cpp | 6 +++- src/sessionbutton.h | 9 +++++ src/sessionexplorer.cpp | 87 +++++++++++++++++++++++++++++++++++++++++++----- src/sessionexplorer.h | 3 ++ 8 files changed, 146 insertions(+), 33 deletions(-) -- Alioth's /home/x2go-admin/maintenancescripts/git/hooks/post-receive-email on /srv/git/code.x2go.org/x2goclient.git
This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch master in repository x2goclient. commit 15f7c78fc28e93223024e2f4c308589a4b5214fd Author: Oleksandr Shneyder <o.shneyder@phoca-gmbh.de> Date: Tue May 12 13:21:25 2020 -0500 Client can synchronize sessions with broker. Broker need to send syncinterval value in the client config section. --- debian/changelog | 2 ++ src/httpbrokerclient.cpp | 13 +++++--- src/onmainwindow.cpp | 51 ++++++++++++++++++---------- src/onmainwindow.h | 8 +++-- src/sessionbutton.cpp | 6 +++- src/sessionbutton.h | 9 +++++ src/sessionexplorer.cpp | 87 +++++++++++++++++++++++++++++++++++++++++++----- src/sessionexplorer.h | 3 ++ 8 files changed, 146 insertions(+), 33 deletions(-) diff --git a/debian/changelog b/debian/changelog index 9625ac9..85b363b 100644 --- a/debian/changelog +++ b/debian/changelog @@ -7,6 +7,8 @@ x2goclient (4.1.2.3-0x2go1) UNRELEASED; urgency=medium - Download alternative resource files from http server. - Support for PNG background images. - Display state of broker connection in status bar. + - Client can synchronize sessions with broker. Broker need to send syncinterval + value in the client config section. [ Ryan Schmidt ] * New upstream version (4.1.2.3): diff --git a/src/httpbrokerclient.cpp b/src/httpbrokerclient.cpp index da08fed..f61bfce 100644 --- a/src/httpbrokerclient.cpp +++ b/src/httpbrokerclient.cpp @@ -501,7 +501,8 @@ void HttpBrokerClient::processClientConfig(const QString& raw_content) { X2goSettings st(raw_content, QSettings::IniFormat); mainWindow->config.brokerEvents=st.setting()->value("events",false).toBool(); - mainWindow->config.brokerLiveEventsTimeout=st.setting()->value("liveevent",false).toUInt(); + mainWindow->config.brokerLiveEventsTimeout=st.setting()->value("liveevent",0).toUInt(); + mainWindow->config.brokerSyncTimeout=st.setting()->value("syncinterval",0).toUInt(); if(mainWindow->config.brokerEvents) { x2goDebug<<"sending client events to broker"; @@ -510,6 +511,10 @@ void HttpBrokerClient::processClientConfig(const QString& raw_content) x2goDebug<<"sending alive events to broker every "<<mainWindow->config.brokerLiveEventsTimeout<<" seconds"; } } + if(mainWindow->config.brokerSyncTimeout) + { + x2goDebug<<"synchronizing with broker every "<<mainWindow->config.brokerSyncTimeout<<" seconds"; + } } @@ -518,7 +523,7 @@ void HttpBrokerClient::createIniFile(const QString& raw_content) QString content; content = raw_content; content.replace("<br>","\n"); - x2goDebug<<"Inifile content: "<<content<<endl; +// x2goDebug<<"Inifile content: "<<content<<endl; QString cont; QStringList lines=content.split("START_USER_SESSIONS\n"); if (lines.count()>1) @@ -543,7 +548,7 @@ void HttpBrokerClient::createIniFile(const QString& raw_content) bool HttpBrokerClient::checkAccess(QString answer ) { - x2goDebug<<"Called checkAccess - answer was: "<<answer; +// x2goDebug<<"Called checkAccess - answer was: "<<answer; if (answer.indexOf("Access granted")==-1) { QMessageBox::critical ( @@ -653,7 +658,7 @@ void HttpBrokerClient::slotRequestFinished ( QNetworkReply* reply ) } QString answer ( reply->readAll() ); - x2goDebug<<"A http request returned. Result was: "<<answer; +// x2goDebug<<"A http request returned. Result was: "<<answer; if (reply == testConRequest) { testConRequest=0l; diff --git a/src/onmainwindow.cpp b/src/onmainwindow.cpp index e61a631..f570967 100644 --- a/src/onmainwindow.cpp +++ b/src/onmainwindow.cpp @@ -209,6 +209,7 @@ ONMainWindow::ONMainWindow ( QWidget *parent ) :QMainWindow ( parent ) readExportsFrom=QString::null; spoolTimer=0l; brokerAliveTimer=0l; + brokerSyncTimer=0l; #ifdef Q_OS_DARWIN modMapTimer = NULL; kbMap = QString (); @@ -607,6 +608,8 @@ void ONMainWindow::initUI() brokerAliveTimer=new QTimer(this); connect ( brokerAliveTimer, SIGNAL ( timeout() ), this, SLOT ( slotSendBrokerAlive() ) ); + brokerSyncTimer=new QTimer(this); + connect ( brokerSyncTimer, SIGNAL( timeout()), broker , SLOT(getUserSessions())); } initSelectSessDlg(); @@ -1002,6 +1005,7 @@ void ONMainWindow::initWidgetsNormal() QTimer::singleShot ( 1, this, SLOT ( slotReadSessions() ) ); else { + bgLay->insertStretch(3); QTimer::singleShot(1, this,SLOT(slotGetBrokerAuth())); } } @@ -1092,7 +1096,6 @@ void ONMainWindow::slotGetBrokerAuth() users->hide(); ln->hide(); - bgLay->insertStretch(3); QString text=tr("<b>Authentication</b>"); /* if(config.brokerName.length()>0) @@ -1852,6 +1855,17 @@ void ONMainWindow::slotSelectedFromList ( UserButton* user ) showPass ( user ); } + +bool ONMainWindow::isPassFormHidden() +{ + return passForm->isHidden(); +} + +bool ONMainWindow::isSelectFormHidden() +{ + return selectSessionDlg->isHidden(); +} + void ONMainWindow::slotClosePass() { if (brokerMode) @@ -1882,6 +1896,7 @@ void ONMainWindow::slotClosePass() sessionExplorer->getLastSession()->show(); uname->setText ( sessionExplorer->getLastSession()->name() ); } + sessionExplorer->setLastSession(0); } uname->setEnabled ( true ); u->setEnabled ( true ); @@ -2296,13 +2311,11 @@ void ONMainWindow::slotReadSessions() if(brokerMode) { - bgLay->removeItem(bgLay->itemAt(3)); +// bgLay->removeItem(bgLay->itemAt(3)); slotResize(QSize(width(), height())); } X2goSettings *st; - sessionExplorer->cleanSessions(); - sessionExplorer->setLastSession(0); if (brokerMode) { @@ -2311,18 +2324,22 @@ void ONMainWindow::slotReadSessions() config.key=QString::null; config.user=QString::null; config.sessiondata=QString::null; - for (int i=sessionExplorer->getSessionsList()->count()-1; i>=0; --i) - { - SessionButton* but=sessionExplorer->getSessionsList()->takeAt(i); - if (but) - delete but; - } st=new X2goSettings(config.iniFile,QSettings::IniFormat); sessionStatusDlg->hide(); - selectSessionDlg->hide(); setEnabled ( true ); - slotClosePass(); + if(config.brokerSyncTimeout*1000!=brokerSyncTimer->interval()) + { + brokerSyncTimer->setInterval(config.brokerSyncTimeout*1000); + } + if(config.brokerSyncTimeout && !(brokerSyncTimer->isActive())) + { + brokerSyncTimer->start(); + } + if(!config.brokerSyncTimeout) + { + brokerSyncTimer->stop(); + } } else st= new X2goSettings( "sessions" ); @@ -2341,12 +2358,7 @@ void ONMainWindow::slotReadSessions() close(); return; } - for ( int i=0; i<slst.size(); ++i ) - { - if ( slst[i]!="embedded" ) - sessionExplorer->createBut ( slst[i] ); - } - sessionExplorer->placeButtons(); + sessionExplorer->updateSessions(slst); if ( slst.size() ==0 ) slotNewSession(); uname->setText ( "" ); @@ -3731,6 +3743,9 @@ bool ONMainWindow::startSession ( const QString& sid, CONTYPE conType ) bool proxyAutologin=false; bool proxyKrbLogin=false; + if(brokerMode) + brokerSyncTimer->stop(); + user=getCurrentUname(); runRemoteCommand=true; if(!embedMode) diff --git a/src/onmainwindow.h b/src/onmainwindow.h index b2ebae6..bf47328 100644 --- a/src/onmainwindow.h +++ b/src/onmainwindow.h @@ -173,6 +173,7 @@ struct ConfigFile bool brokerKrbLogin; bool brokerEvents; //Send events to broker and get control commands uint brokerLiveEventsTimeout; //(seconds)How often send alive events, 0 - do not send + uint brokerSyncTimeout; //(seconds)How often synchronize with broker, 0 - not synchronize QString brokerSshKey; QString brokerCaCertFile; QString iniFile; @@ -571,6 +572,8 @@ public: bool startSshd (key_types key_type = RSA_KEY_TYPE); QSize getEmbedAreaSize(); void setBrokerStatus(const QString& text, bool error=false); + bool isPassFormHidden(); + bool isSelectFormHidden(); #ifdef Q_OS_WIN static QString cygwinPath ( const QString& winPath ); void startXOrg(std::size_t start_offset = 0); @@ -738,6 +741,7 @@ private: QTimer *proxyWinTimer; QTimer *xineramaTimer; QTimer *brokerAliveTimer; + QTimer *brokerSyncTimer; short xinSizeInc; QRect lastDisplayGeometry; QList <QRect> xineramaScreens; @@ -1049,7 +1053,6 @@ private slots: void readUsers(); void slotSelectedFromList ( UserButton* user ); void slotUnameEntered(); - void slotClosePass(); void slotReadSessions(); void slotManage(); void displayToolBar ( bool ); @@ -1080,6 +1083,8 @@ public slots: void slotActivateWindow(); void setFocus(); void slotEnableBrokerLogoutButton (); + void slotClosePass(); + void slotCloseSelectDlg(); private slots: void slotSendBrokerAlive(); @@ -1087,7 +1092,6 @@ private slots: void slotSnameChanged ( const QString& ); void slotSelectedFromList ( SessionButton* session ); void slotSessEnter(); - void slotCloseSelectDlg(); void slotActivated ( const QModelIndex& index ); void slotResumeSess(); void slotSuspendSess(); diff --git a/src/sessionbutton.cpp b/src/sessionbutton.cpp index 15bf74e..6467fe9 100644 --- a/src/sessionbutton.cpp +++ b/src/sessionbutton.cpp @@ -58,6 +58,7 @@ SessionButton::SessionButton ( ONMainWindow* mw,QWidget *parent, QString id ) setPalette(pal); + updated=false; QFont fnt=font(); if ( mw->retMiniMode() ) @@ -293,6 +294,8 @@ void SessionButton::slotRemove() void SessionButton::redraw() { + + updated=true; bool snd; @@ -322,6 +325,7 @@ void SessionButton::redraw() sessName->setText (elName); sessName->setToolTip(nameofSession); + sessStatus->setText(""); QString status=st->setting()->value ( sid+"/status", ( QVariant ) QString::null ).toString(); if (status == "R") @@ -362,7 +366,7 @@ void SessionButton::redraw() { sessIcon=par->iconsPath("/128x128/x2gosession.png"); } - x2goDebug << "Creating QPixmap with session icon: " << sessIcon.toLatin1 () << "."; +// x2goDebug << "Creating QPixmap with session icon: " << sessIcon.toLatin1 () << "."; if (!par->brokerMode || sessIcon == par->iconsPath("/128x128/x2gosession.png")) pix=new QPixmap( sessIcon ); else diff --git a/src/sessionbutton.h b/src/sessionbutton.h index 78115b0..d831e61 100644 --- a/src/sessionbutton.h +++ b/src/sessionbutton.h @@ -52,6 +52,14 @@ public: { this->path=path; } + void setNotUpdated() + { + updated=false; + } + bool isUpdated() + { + return updated; + } private: QString nameofSession; @@ -79,6 +87,7 @@ private: bool rootless; bool published; bool editable; + bool updated; private slots: void slotClicked(); diff --git a/src/sessionexplorer.cpp b/src/sessionexplorer.cpp index a6e33c6..d163aa6 100644 --- a/src/sessionexplorer.cpp +++ b/src/sessionexplorer.cpp @@ -67,6 +67,55 @@ SessionExplorer::~SessionExplorer() { } +SessionButton * SessionExplorer::findSession(const QString& id) +{ + foreach (SessionButton* s, sessions) + { + if(s->id()==id) + return s; + } + return 0; +} + + +void SessionExplorer::updateSessions(QStringList slst) +{ + foreach (SessionButton* s, sessions) + { + s->setNotUpdated(); + } + for ( int i=0; i<slst.size(); ++i ) + { + if ( slst[i]=="embedded" ) + continue; + SessionButton* s=findSession(slst[i]); + if(!s) + { + s=createBut ( slst[i] ); + } + else + checkPath(s); + s->redraw(); + } + foreach (SessionButton* s, sessions) + { + if(!s->isUpdated()) + { + sessions.removeOne(s); + if(s==lastSession) + { + lastSession=0; + parent->slotCloseSelectDlg(); + parent->slotClosePass(); + } + delete s; + } + } + + placeButtons(); +} + + void SessionExplorer::resize() { pathLabel->setMaximumWidth(parent->getUsersArea()->width()-backButton->width()); @@ -242,6 +291,17 @@ void SessionExplorer::slotCreateDesktopIcon ( SessionButton* bt ) #endif } +void SessionExplorer::checkPath(SessionButton* s) +{ + if(s->getPath()!="") + { + if(findFolder(s->getPath())==-1) + { + createFolder(s->getPath()); + } + } +} + SessionButton* SessionExplorer::createBut ( const QString& id ) { @@ -257,13 +317,7 @@ SessionButton* SessionExplorer::createBut ( const QString& id ) connect ( l,SIGNAL ( sessionSelected ( SessionButton* ) ),parent, SLOT ( slotSelectedFromList ( SessionButton* ) ) ); - if(l->getPath()!="") - { - if(findFolder(l->getPath())==-1) - { - createFolder(l->getPath()); - } - } + checkPath(l); return l; } @@ -281,7 +335,7 @@ void SessionExplorer::placeButtons() for ( int i=0; i<folders.size(); ++i ) { - if(folders[i]->getPath() != currentPath) + if((folders[i]->getPath() != currentPath)||(getFolderChildren(folders[i]).length()<=0)) { folders[i]->hide(); continue; @@ -304,6 +358,12 @@ void SessionExplorer::placeButtons() folders[i]->setChildrenList(getFolderChildren(folders[i])); } + if(parent->isPassFormHidden() && parent->isSelectFormHidden()) + { + lastSession=0; + parent->slotClosePass(); + } + for ( int i=0; i<sessions.size(); ++i ) { if(sessions[i]->getPath() != currentPath) @@ -332,7 +392,12 @@ void SessionExplorer::placeButtons() currentVerticalPosition+=230; } } +// x2goDebug<<"last session"<<(void*)lastSession<<"current"<<(void*)sessions[i]; sessions[i]->show(); + if(lastSession == sessions[i]) + { + sessions[i]->hide(); + } } if ( currentVerticalPosition ) @@ -340,6 +405,11 @@ void SessionExplorer::placeButtons() parent->getUsersFrame()->setFixedHeight ( currentVerticalPosition); } + int id=findFolder(currentPath); + if(id<0) + return; + if(getFolderChildren(folders[id]).length()<=0) + slotLevelUp(); } QStringList SessionExplorer::getFolderChildren(FolderButton* folder) @@ -388,6 +458,7 @@ void SessionExplorer::setNavigationVisible(bool value) void SessionExplorer::createFolder(QString path) { + x2goDebug<<"Create Folder:"<<path; QStringList tails=path.split("/"); QStringList currentPath; for(int i=0; i<tails.count()-1; ++i) diff --git a/src/sessionexplorer.h b/src/sessionexplorer.h index 09f7c79..a1ec64e 100644 --- a/src/sessionexplorer.h +++ b/src/sessionexplorer.h @@ -63,6 +63,7 @@ public: void createNewFolder(QString path); void renameFolder(QString oldPath, QString currentPath); void deleteFolder(QString path); + void updateSessions(QStringList slst); QString getCurrentPath() { @@ -94,6 +95,8 @@ private: int findFolder(QString path); void createFolder(QString path); void getFoldersFromConfig(); + SessionButton* findSession( const QString& id); + void checkPath(SessionButton* s); public slots: void slotDeleteButton ( SessionButton * bt ); -- Alioth's /home/x2go-admin/maintenancescripts/git/hooks/post-receive-email on /srv/git/code.x2go.org/x2goclient.git