start();
}
+void OcsShareJob::setName(const QString &shareId, const QString &name)
+{
+ appendPath(shareId);
+ setVerb("PUT");
+ addParam(QString::fromLatin1("name"), name);
+ _value = name;
+
+ start();
+}
+
void OcsShareJob::setPermissions(const QString &shareId,
const Share::Permissions permissions)
{
void setPassword(const QString &shareId, const QString& password);
/**
- * Void set the share to be public upload
+ * Set the share to be public upload
*
* @param publicUpload Set or remove public upload
*/
void setPublicUpload(const QString &shareId, bool publicUpload);
+ /**
+ * Change the name of a share
+ */
+ void setName(const QString &shareId, const QString &name);
+
/**
* Set the permissions
*
_ui->linkShares->horizontalHeader()->setSectionResizeMode(2, QHeaderView::ResizeToContents);
//Is this a file or folder?
- _isFile = QFileInfo(localPath).isFile();
+ QFileInfo fi(localPath);
+ _isFile = fi.isFile();
+ _ui->nameLineEdit->setText(tr("%1 link").arg(fi.fileName()));
// the following progress indicator widgets are added to layouts which makes them
// automatically deleted once the dialog dies.
connect(_ui->nameLineEdit, SIGNAL(returnPressed()), SLOT(slotShareNameEntered()));
connect(_ui->createShareButton, SIGNAL(clicked(bool)), SLOT(slotShareNameEntered()));
connect(_ui->linkShares, SIGNAL(itemSelectionChanged()), SLOT(slotShareSelectionChanged()));
+ connect(_ui->linkShares, SIGNAL(itemChanged(QTableWidgetItem*)), SLOT(slotNameEdited(QTableWidgetItem*)));
connect(_ui->checkBox_password, SIGNAL(clicked()), this, SLOT(slotCheckBoxPasswordClicked()));
connect(_ui->lineEdit_password, SIGNAL(returnPressed()), this, SLOT(slotPasswordReturnPressed()));
connect(_ui->lineEdit_password, SIGNAL(textChanged(QString)), this, SLOT(slotPasswordChanged(QString)));
table->clearContents();
table->setRowCount(0);
- auto shareIcon = QIcon::fromTheme(QLatin1String("mail-send"));
auto deleteIcon = QIcon::fromTheme(QLatin1String("user-trash"),
QIcon(QLatin1String(":/client/resources/delete.png")));
auto row = table->rowCount();
table->insertRow(row);
+ auto nameItem = new QTableWidgetItem;
QString name = linkShare->getName();
if (name.isEmpty()) {
- name = tr("Public link");
+ if (!_namesSupported) {
+ name = tr("Public link");
+ nameItem->setFlags(nameItem->flags() & ~Qt::ItemIsEditable);
+ } else {
+ name = linkShare->getToken();
+ }
}
- auto nameItem = new QTableWidgetItem(name);
+ nameItem->setText(name);
nameItem->setData(Qt::UserRole, QVariant::fromValue(linkShare));
table->setItem(row, 0, nameItem);
auto shareButton = new QToolButton;
- shareButton->setIcon(shareIcon);
+ shareButton->setText("...");
shareButton->setProperty(propertyShareC, QVariant::fromValue(linkShare));
shareButton->setMenu(_shareLinkMenu);
shareButton->setPopupMode(QToolButton::InstantPopup);
{
if (!selectedShare()) {
// If share creation requires a password, we'll be in this case
- if (_namesSupported && _ui->nameLineEdit->text().isEmpty()) {
- _ui->nameLineEdit->setFocus();
- return;
- }
if (_ui->lineEdit_password->text().isEmpty()) {
_ui->lineEdit_password->setFocus();
return;
_ui->pushButton_setPassword->setEnabled( newText.length() > 0 );
}
+void ShareLinkWidget::slotNameEdited(QTableWidgetItem* item)
+{
+ if (!_namesSupported) {
+ return;
+ }
+
+ QString newName = item->text();
+ auto share = item->data(Qt::UserRole).value<QSharedPointer<LinkShare>>();
+ if (share && newName != share->getName() && newName != share->getToken()) {
+ share->setName(newName);
+ }
+}
+
void ShareLinkWidget::setPassword(const QString &password)
{
if (auto current = selectedShare()) {
void ShareLinkWidget::slotShareNameEntered()
{
- if (!_ui->nameLineEdit->text().isEmpty() || !_namesSupported) {
- _pi_create->startAnimation();
- _manager->createLinkShare(_sharePath, _ui->nameLineEdit->text(), QString());
- }
+ _pi_create->startAnimation();
+ _manager->createLinkShare(_sharePath, _ui->nameLineEdit->text(), QString());
}
void ShareLinkWidget::slotDeleteShareFetched()
#include <QList>
class QMenu;
+class QTableWidgetItem;
namespace OCC {
void slotCheckBoxEditingClicked();
void slotExpireDateChanged(const QDate &date);
void slotPasswordChanged(const QString& newText);
+ void slotNameEdited(QTableWidgetItem* item);
void slotShareLinkButtonTriggered(QAction* action);
<item>
<widget class="QPushButton" name="createShareButton">
<property name="text">
- <string>&Create</string>
+ <string>&Create new</string>
</property>
</widget>
</item>
<property name="bottomMargin">
<number>0</number>
</property>
- <item row="4" column="0">
+ <item row="7" column="0">
<layout class="QHBoxLayout" name="horizontalLayout_expire">
<property name="leftMargin">
<number>0</number>
</item>
</layout>
</item>
- <item row="0" column="0">
- <widget class="QWidget" name="widget_editing" native="true">
- <layout class="QHBoxLayout" name="horizontalLayout_editing">
- <property name="leftMargin">
- <number>0</number>
- </property>
- <property name="topMargin">
- <number>0</number>
- </property>
- <property name="rightMargin">
- <number>0</number>
- </property>
- <property name="bottomMargin">
- <number>0</number>
- </property>
- <item>
- <widget class="QCheckBox" name="checkBox_editing">
- <property name="text">
- <string>Allow editing</string>
- </property>
- </widget>
- </item>
- <item>
- <spacer name="horizontalSpacer">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </widget>
- </item>
- <item row="2" column="0">
+ <item row="5" column="0">
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="leftMargin">
<number>20</number>
</item>
</layout>
</item>
- <item row="1" column="0">
+ <item row="4" column="0">
<layout class="QHBoxLayout" name="horizontalLayout_password">
<item>
<widget class="QCheckBox" name="checkBox_password">
</item>
</layout>
</item>
+ <item row="2" column="0">
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>Link properties:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="0">
+ <widget class="QWidget" name="widget_editing" native="true">
+ <layout class="QHBoxLayout" name="horizontalLayout_editing">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
+ <number>0</number>
+ </property>
+ <item>
+ <widget class="QCheckBox" name="checkBox_editing">
+ <property name="text">
+ <string>Allow editing</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </widget>
+ </item>
</layout>
</widget>
</item>
LinkShare::LinkShare(AccountPtr account,
const QString& id,
const QString& path,
- const QString &name,
+ const QString& name,
+ const QString& token,
Permissions permissions,
bool passwordSet,
const QUrl& url,
const QDate& expireDate)
: Share(account, id, path, Share::TypeLink, permissions),
_name(name),
+ _token(token),
_passwordSet(passwordSet),
_expireDate(expireDate),
_url(url)
return _name;
}
+void LinkShare::setName(const QString& name)
+{
+ OcsShareJob *job = new OcsShareJob(_account);
+ connect(job, SIGNAL(shareJobFinished(QVariantMap,QVariant)), SLOT(slotNameSet(QVariantMap,QVariant)));
+ connect(job, SIGNAL(ocsError(int,QString)), SLOT(slotOcsError(int,QString)));
+ job->setName(getId(), name);
+}
+
+QString LinkShare::getToken() const
+{
+ return _token;
+}
+
void LinkShare::slotPublicUploadSet(const QVariantMap&, const QVariant &value)
{
if (value.toBool()) {
emit passwordSetError(statusCode, message);
}
+void LinkShare::slotNameSet(const QVariantMap &, const QVariant &value)
+{
+ _name = value.toString();
+ emit nameSet();
+}
+
ShareManager::ShareManager(AccountPtr account, QObject *parent)
: QObject(parent),
_account(account)
emit sharesFetched(shares);
}
-QSharedPointer<LinkShare> ShareManager::parseLinkShare(const QVariantMap &data) {
+QSharedPointer<LinkShare> ShareManager::parseLinkShare(const QVariantMap &data)
+{
QUrl url;
// From ownCloud server 8.2 the url field is always set for public shares
expireDate = QDate::fromString(data.value("expiration").toString(), "yyyy-MM-dd 00:00:00");
}
- QString name = data.value("name").toString();
-
return QSharedPointer<LinkShare>(new LinkShare(_account,
data.value("id").toString(),
data.value("path").toString(),
- name,
+ data.value("name").toString(),
+ data.value("token").toString(),
(Share::Permissions)data.value("permissions").toInt(),
data.value("share_with").isValid(),
url,
const QString& id,
const QString& path,
const QString& name,
+ const QString& token,
const Permissions permissions,
bool passwordSet,
const QUrl& url,
void setPublicUpload(bool publicUpload);
/*
- * Returns the name of the link share.
+ * Returns the name of the link share. Can be empty.
*/
QString getName() const;
+ /*
+ * Set the name of the link share.
+ *
+ * Emits either nameSet() or serverError().
+ */
+ void setName(const QString& name);
+
+ /*
+ * Returns the token of the link share.
+ */
+ QString getToken() const;
+
/*
* Set the password
*
void publicUploadSet();
void passwordSet();
void passwordSetError(int statusCode, const QString &message);
+ void nameSet();
private slots:
void slotPasswordSet(const QVariantMap&, const QVariant &value);
void slotPublicUploadSet(const QVariantMap&, const QVariant &value);
void slotExpireDateSet(const QVariantMap& reply, const QVariant &value);
void slotSetPasswordError(int statusCode, const QString &message);
+ void slotNameSet(const QVariantMap&, const QVariant &value);
private:
QString _name;
+ QString _token;
bool _passwordSet;
QDate _expireDate;
QUrl _url;
<string>Share NewDocument.odt</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
- <property name="leftMargin">
- <number>0</number>
- </property>
- <property name="topMargin">
- <number>0</number>
- </property>
- <property name="rightMargin">
- <number>0</number>
- </property>
- <property name="bottomMargin">
- <number>0</number>
- </property>
<item>
<layout class="QHBoxLayout" name="shareeHorizontalLayout">
<item>