[Pkg-owncloud-commits] [owncloud-client] 244/484: [Sharing] Add user/group sharing dialog
Sandro Knauß
hefee-guest at moszumanska.debian.org
Wed Dec 16 00:37:47 UTC 2015
This is an automated email from the git hooks/post-receive script.
hefee-guest pushed a commit to branch master
in repository owncloud-client.
commit 309be57a12e4d6ef4190e0cd1dd2599aae7d9fc0
Author: Roeland Jago Douma <rullzer at owncloud.com>
Date: Sat Oct 31 22:21:09 2015 +0100
[Sharing] Add user/group sharing dialog
Dialog can now retrive current shares for path, set the permissions on
those shares and delete the share.
---
src/gui/CMakeLists.txt | 3 +
src/gui/application.cpp | 2 +
src/gui/owncloudgui.cpp | 22 +++++
src/gui/owncloudgui.h | 1 +
src/gui/shareusergroupdialog.cpp | 170 +++++++++++++++++++++++++++++++++++++++
src/gui/shareusergroupdialog.h | 98 ++++++++++++++++++++++
src/gui/shareusergroupdialog.ui | 133 ++++++++++++++++++++++++++++++
src/gui/socketapi.cpp | 45 +++++++++++
src/gui/socketapi.h | 2 +
9 files changed, 476 insertions(+)
diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt
index af73933..917739b 100644
--- a/src/gui/CMakeLists.txt
+++ b/src/gui/CMakeLists.txt
@@ -23,6 +23,8 @@ set(client_UI
protocolwidget.ui
settingsdialog.ui
sharedialog.ui
+ shareusergroupdialog.ui
+ sharedialogshare.ui
sslerrordialog.ui
owncloudsetuppage.ui
addcertificatedialog.ui
@@ -60,6 +62,7 @@ set(client_SRCS
settingsdialog.cpp
share.cpp
sharedialog.cpp
+ shareusergroupdialog.cpp
socketapi.cpp
sslbutton.cpp
sslerrordialog.cpp
diff --git a/src/gui/application.cpp b/src/gui/application.cpp
index add9add..41e72e2 100644
--- a/src/gui/application.cpp
+++ b/src/gui/application.cpp
@@ -174,6 +174,8 @@ Application::Application(int &argc, char **argv) :
connect(FolderMan::instance()->socketApi(), SIGNAL(shareCommandReceived(QString, QString, bool)),
_gui, SLOT(slotShowShareDialog(QString, QString, bool)));
+ connect(FolderMan::instance()->socketApi(), SIGNAL(shareUserGroupCommandReceived(QString, QString, bool)),
+ _gui, SLOT(slotShowShareUserGroupDialog(QString, QString, bool)));
// startup procedure.
connect(&_checkConnectionTimer, SIGNAL(timeout()), this, SLOT(slotCheckConnection()));
diff --git a/src/gui/owncloudgui.cpp b/src/gui/owncloudgui.cpp
index 4adaeaa..4a04598 100644
--- a/src/gui/owncloudgui.cpp
+++ b/src/gui/owncloudgui.cpp
@@ -20,6 +20,7 @@
#include "progressdispatcher.h"
#include "owncloudsetupwizard.h"
#include "sharedialog.h"
+#include "shareusergroupdialog.h"
#if defined(Q_OS_MAC)
# include "settingsdialogmac.h"
# include "macwindow.h" // qtmacgoodies
@@ -780,5 +781,26 @@ void ownCloudGui::slotShowShareDialog(const QString &sharePath, const QString &l
raiseDialog(w);
}
+void ownCloudGui::slotShowShareUserGroupDialog(const QString &sharePath, const QString &localPath, bool resharingAllowed)
+{
+ const auto folder = FolderMan::instance()->folderForPath(localPath);
+ if (!folder) {
+ qDebug() << "Could not open share dialog for" << localPath << "no responsible folder found";
+ return;
+ }
+
+ // For https://github.com/owncloud/client/issues/3783
+ _settingsDialog->hide();
+
+ const auto accountState = folder->accountState();
+
+ qDebug() << Q_FUNC_INFO << "Opening share dialog" << sharePath << localPath;
+ ShareUserGroupDialog *w = new ShareUserGroupDialog(accountState->account(), sharePath, localPath, resharingAllowed);
+ w->getShares();
+ w->setAttribute( Qt::WA_DeleteOnClose, true );
+ raiseDialog(w);
+}
+
+
} // end namespace
diff --git a/src/gui/owncloudgui.h b/src/gui/owncloudgui.h
index 891bd74..014c3b1 100644
--- a/src/gui/owncloudgui.h
+++ b/src/gui/owncloudgui.h
@@ -77,6 +77,7 @@ public slots:
void slotOpenPath(const QString& path);
void slotAccountStateChanged();
void slotShowShareDialog(const QString &sharePath, const QString &localPath, bool resharingAllowed);
+ void slotShowShareUserGroupDialog(const QString &sharePath, const QString &localPath, bool resharingAllowed);
private slots:
void slotDisplayIdle();
diff --git a/src/gui/shareusergroupdialog.cpp b/src/gui/shareusergroupdialog.cpp
new file mode 100644
index 0000000..530f80b
--- /dev/null
+++ b/src/gui/shareusergroupdialog.cpp
@@ -0,0 +1,170 @@
+/*
+ * Copyright (C) by Roeland Jago Douma <roeland at owncloud.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details.
+ */
+
+#include "shareusergroupdialog.h"
+#include "ui_shareusergroupdialog.h"
+#include "ui_sharedialogshare.h"
+#include "account.h"
+#include "json.h"
+#include "folderman.h"
+#include "folder.h"
+#include "accountmanager.h"
+#include "theme.h"
+#include "configfile.h"
+#include "capabilities.h"
+
+#include "thumbnailjob.h"
+#include "share.h"
+
+#include "QProgressIndicator.h"
+#include <QBuffer>
+#include <QFileIconProvider>
+#include <QClipboard>
+#include <QFileInfo>
+
+namespace OCC {
+
+ShareUserGroupDialog::ShareUserGroupDialog(AccountPtr account, const QString &sharePath, const QString &localPath, bool resharingAllowed, QWidget *parent) :
+ QDialog(parent),
+ _ui(new Ui::ShareUserGroupDialog),
+ _account(account),
+ _sharePath(sharePath),
+ _localPath(localPath),
+ _resharingAllowed(resharingAllowed)
+{
+ setAttribute(Qt::WA_DeleteOnClose);
+ setObjectName("SharingDialogUG"); // required as group for saveGeometry call
+
+ _ui->setupUi(this);
+
+ //Is this a file or folder?
+ _isFile = QFileInfo(localPath).isFile();
+
+ _manager = new ShareManager(_account, this);
+ connect(_manager, SIGNAL(sharesFetched(QList<QSharedPointer<Share>>)), SLOT(slotSharesFetched(QList<QSharedPointer<Share>>)));
+}
+
+void ShareUserGroupDialog::done( int r ) {
+ ConfigFile cfg;
+ cfg.saveGeometry(this);
+ QDialog::done(r);
+}
+
+ShareUserGroupDialog::~ShareUserGroupDialog()
+{
+ delete _ui;
+}
+
+void ShareUserGroupDialog::getShares()
+{
+ _manager->fetchShares(_sharePath);
+}
+
+void ShareUserGroupDialog::slotSharesFetched(const QList<QSharedPointer<Share>> &shares)
+{
+ const QString versionString = _account->serverVersion();
+ qDebug() << Q_FUNC_INFO << versionString << "Fetched" << shares.count() << "shares";
+
+ // TODO clear old shares
+
+ foreach(const auto &share, shares) {
+
+ if (share->getShareType() == Share::TypeLink) {
+ continue;
+ }
+
+ ShareDialogShare *s = new ShareDialogShare(share, this);
+ _ui->sharesLayout->addWidget(s);
+ }
+
+ // Add all new shares to share list
+
+}
+
+ShareDialogShare::ShareDialogShare(QSharedPointer<Share> share,
+ QWidget *parent) :
+ QWidget(parent),
+ _ui(new Ui::ShareDialogShare),
+ _share(share)
+{
+ _ui->setupUi(this);
+
+ if (share->getPermissions() & Share::PermissionUpdate) {
+ _ui->permissionUpdate->setCheckState(Qt::Checked);
+ }
+ if (share->getPermissions() & Share::PermissionCreate) {
+ _ui->permissionCreate->setCheckState(Qt::Checked);
+ }
+ if (share->getPermissions() & Share::PermissionDelete) {
+ _ui->permissionDelete->setCheckState(Qt::Checked);
+ }
+ if (share->getPermissions() & Share::PermissionShare) {
+ _ui->permissionShare->setCheckState(Qt::Checked);
+ }
+
+ connect(_ui->permissionUpdate, SIGNAL(clicked(bool)), SLOT(slotPermissionsChanged()));
+ connect(_ui->permissionCreate, SIGNAL(clicked(bool)), SLOT(slotPermissionsChanged()));
+ connect(_ui->permissionDelete, SIGNAL(clicked(bool)), SLOT(slotPermissionsChanged()));
+ connect(_ui->permissionShare, SIGNAL(clicked(bool)), SLOT(slotPermissionsChanged()));
+
+ connect(share.data(), SIGNAL(permissionsSet()), SLOT(slotPermissionsSet()));
+ connect(share.data(), SIGNAL(shareDeleted()), SLOT(slotShareDeleted()));
+}
+
+void ShareDialogShare::on_deleteShareButton_clicked()
+{
+ setEnabled(false);
+ _share->deleteShare();
+}
+
+ShareDialogShare::~ShareDialogShare()
+{
+ delete _ui;
+}
+
+void ShareDialogShare::slotPermissionsChanged()
+{
+ setEnabled(false);
+
+ Share::Permissions permissions = Share::PermissionRead;
+
+ if (_ui->permissionUpdate->checkState() == Qt::Checked) {
+ permissions |= Share::PermissionUpdate;
+ }
+
+ if (_ui->permissionCreate->checkState() == Qt::Checked) {
+ permissions |= Share::PermissionCreate;
+ }
+
+ if (_ui->permissionDelete->checkState() == Qt::Checked) {
+ permissions |= Share::PermissionDelete;
+ }
+
+ if (_ui->permissionShare->checkState() == Qt::Checked) {
+ permissions |= Share::PermissionShare;
+ }
+
+ _share->setPermissions(permissions);
+}
+
+void ShareDialogShare::slotShareDeleted()
+{
+ deleteLater();
+}
+
+void ShareDialogShare::slotPermissionsSet()
+{
+ setEnabled(true);
+}
+
+}
diff --git a/src/gui/shareusergroupdialog.h b/src/gui/shareusergroupdialog.h
new file mode 100644
index 0000000..f6d4954
--- /dev/null
+++ b/src/gui/shareusergroupdialog.h
@@ -0,0 +1,98 @@
+/*
+ * Copyright (C) by Roeland Jago Douma <roeland at owncloud.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details.
+ */
+
+#ifndef SHAREDIALOG_UG_H
+#define SHAREDIALOG_UG_H
+
+#include "accountfwd.h"
+#include "QProgressIndicator.h"
+#include <QDialog>
+#include <QWidget>
+#include <QVariantMap>
+#include <QSharedPointer>
+#include <QList>
+
+namespace OCC {
+
+namespace Ui {
+class ShareUserGroupDialog;
+class ShareDialogShare;
+}
+
+class AbstractCredentials;
+class QuotaInfo;
+class SyncResult;
+class Share;
+class ShareManager;
+
+class ShareDialogShare : public QWidget
+{
+ Q_OBJECT
+
+public:
+ explicit ShareDialogShare(QSharedPointer<Share> Share, QWidget *parent = 0);
+ ~ShareDialogShare();
+
+signals:
+ void shareDeleted(ShareDialogShare *share);
+
+private slots:
+ void on_deleteShareButton_clicked();
+ void slotPermissionsChanged();
+
+ void slotShareDeleted();
+ void slotPermissionsSet();
+
+private:
+ Ui::ShareDialogShare *_ui;
+ QSharedPointer<Share> _share;
+};
+
+
+/**
+ * @brief The ShareDialog (user/group) class
+ * @ingroup gui
+ */
+class ShareUserGroupDialog : public QDialog
+{
+ Q_OBJECT
+
+public:
+ explicit ShareUserGroupDialog(AccountPtr account,
+ const QString &sharePath,
+ const QString &localPath,
+ bool resharingAllowed,
+ QWidget *parent = 0);
+ ~ShareUserGroupDialog();
+ void getShares();
+
+private slots:
+ void slotSharesFetched(const QList<QSharedPointer<Share>> &shares);
+ void done( int r );
+
+private:
+ Ui::ShareUserGroupDialog *_ui;
+ AccountPtr _account;
+ QString _sharePath;
+ QString _localPath;
+
+ bool _resharingAllowed;
+ bool _isFile;
+
+ ShareManager *_manager;
+ QList<ShareDialogShare*> _shares;
+};
+
+}
+
+#endif // SHAREDIALOG_UG_H
diff --git a/src/gui/shareusergroupdialog.ui b/src/gui/shareusergroupdialog.ui
new file mode 100644
index 0000000..9759130
--- /dev/null
+++ b/src/gui/shareusergroupdialog.ui
@@ -0,0 +1,133 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>OCC::ShareUserGroupDialog</class>
+ <widget class="QDialog" name="OCC::ShareUserGroupDialog">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>372</width>
+ <height>505</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Share NewDocument.odt</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout_3">
+ <item row="0" column="0" colspan="2">
+ <layout class="QGridLayout" name="gridLayout">
+ <item row="0" column="0" rowspan="2">
+ <widget class="QLabel" name="label_icon">
+ <property name="text">
+ <string>TextLabel</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QLabel" name="label_name">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="font">
+ <font>
+ <weight>75</weight>
+ <bold>true</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>share label</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="2" rowspan="2">
+ <widget class="QProgressIndicator" name="pi_share" native="true"/>
+ </item>
+ <item row="1" column="1">
+ <widget class="QLabel" name="label_sharePath">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="font">
+ <font>
+ <weight>50</weight>
+ <bold>false</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>ownCloud Path:</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item row="3" column="0">
+ <widget class="QLabel" name="errorLabel">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>TextLabel</string>
+ </property>
+ </widget>
+ </item>
+ <item row="4" column="0" colspan="2">
+ <widget class="QDialogButtonBox" name="buttonBox">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Minimum">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="standardButtons">
+ <set>QDialogButtonBox::Close</set>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <widget class="QLineEdit" name="newShareLineEdit"/>
+ </item>
+ <item>
+ <widget class="QPushButton" name="newSharePushButton">
+ <property name="text">
+ <string>Share</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item row="2" column="0">
+ <layout class="QVBoxLayout" name="sharesLayout">
+ <item>
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>Shares</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ <layoutdefault spacing="6" margin="11"/>
+ <customwidgets>
+ <customwidget>
+ <class>QProgressIndicator</class>
+ <extends>QWidget</extends>
+ <header>QProgressIndicator.h</header>
+ <container>1</container>
+ </customwidget>
+ </customwidgets>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/src/gui/socketapi.cpp b/src/gui/socketapi.cpp
index a3ffa93..5b59bb9 100644
--- a/src/gui/socketapi.cpp
+++ b/src/gui/socketapi.cpp
@@ -404,6 +404,51 @@ void SocketApi::command_SHARE(const QString& localFile, QIODevice* socket)
}
}
+void SocketApi::command_SHARE_USER_GROUP(const QString& localFile, QIODevice* socket)
+{
+ if (!socket) {
+ qDebug() << Q_FUNC_INFO << "No valid socket object.";
+ return;
+ }
+
+ qDebug() << Q_FUNC_INFO << localFile;
+
+ Folder *shareFolder = FolderMan::instance()->folderForPath(localFile);
+ if (!shareFolder) {
+ const QString message = QLatin1String("SHARE:NOP:")+QDir::toNativeSeparators(localFile);
+ // files that are not within a sync folder are not synced.
+ sendMessage(socket, message);
+ } else if (!shareFolder->accountState()->isConnected()) {
+ const QString message = QLatin1String("SHARE:NOTCONNECTED:")+QDir::toNativeSeparators(localFile);
+ // if the folder isn't connected, don't open the share dialog
+ sendMessage(socket, message);
+ } else {
+ const QString folderForPath = shareFolder->path();
+ const QString remotePath = shareFolder->remotePath() + localFile.right(localFile.count()-folderForPath.count()+1);
+
+ // Can't share root folder
+ if (QDir::cleanPath(remotePath) == "/") {
+ const QString message = QLatin1String("SHARE:CANNOTSHAREROOT:")+QDir::toNativeSeparators(localFile);
+ sendMessage(socket, message);
+ return;
+ }
+
+ SyncJournalFileRecord rec = dbFileRecord_capi(shareFolder, localFile);
+
+ bool allowReshare = true; // lets assume the good
+ if( rec.isValid() ) {
+ // check the permission: Is resharing allowed?
+ if( !rec._remotePerm.contains('R') ) {
+ allowReshare = false;
+ }
+ }
+ const QString message = QLatin1String("SHARE:OK:")+QDir::toNativeSeparators(localFile);
+ sendMessage(socket, message);
+
+ emit shareUserGroupCommandReceived(remotePath, localFile, allowReshare);
+ }
+}
+
void SocketApi::command_VERSION(const QString&, QIODevice* socket)
{
sendMessage(socket, QLatin1String("VERSION:" MIRALL_VERSION_STRING ":" MIRALL_SOCKET_API_VERSION));
diff --git a/src/gui/socketapi.h b/src/gui/socketapi.h
index 238c342..482f151 100644
--- a/src/gui/socketapi.h
+++ b/src/gui/socketapi.h
@@ -55,6 +55,7 @@ public slots:
signals:
void shareCommandReceived(const QString &sharePath, const QString &localPath, bool resharingAllowed);
+ void shareUserGroupCommandReceived(const QString &sharePath, const QString &localPath, bool resharingAllowed);
private slots:
void slotNewConnection();
@@ -74,6 +75,7 @@ private:
Q_INVOKABLE void command_RETRIEVE_FOLDER_STATUS(const QString& argument, QIODevice* socket);
Q_INVOKABLE void command_RETRIEVE_FILE_STATUS(const QString& argument, QIODevice* socket);
Q_INVOKABLE void command_SHARE(const QString& localFile, QIODevice* socket);
+ Q_INVOKABLE void command_SHARE_USER_GROUP(const QString& localFile, QIODevice* socket);
Q_INVOKABLE void command_VERSION(const QString& argument, QIODevice* socket);
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-owncloud/owncloud-client.git
More information about the Pkg-owncloud-commits
mailing list