[Sharing] Filter sharee list properly

You can't share with a user/group that you've already shared with
You can't share with yourself
This commit is contained in:
Roeland Jago Douma 2015-11-05 12:30:34 +01:00
parent 3e4612a1f0
commit 20fd349e17
4 changed files with 38 additions and 4 deletions

View file

@ -56,11 +56,13 @@ Sharee::Type Sharee::type() const
ShareeModel::ShareeModel(AccountPtr account,
const QString search,
const QString type,
const QVector<QSharedPointer<Sharee>> &shareeBlacklist,
QObject *parent)
: QAbstractListModel(parent),
_account(account),
_search(search),
_type(type)
_type(type),
_shareeBlacklist(shareeBlacklist)
{
}
@ -116,8 +118,25 @@ void ShareeModel::shareesFetched(const QVariantMap &reply)
}
}
beginInsertRows(QModelIndex(), _sharees.size(), newSharees.size());
_sharees += newSharees;
// Filter sharees that we have already shared with
QVector<QSharedPointer<Sharee>> filteredSharees;
foreach(const auto &sharee, newSharees) {
bool found = false;
foreach(const auto &blacklistSharee, _shareeBlacklist) {
if (sharee->type() == blacklistSharee->type() &&
sharee->shareWith() == blacklistSharee->shareWith()) {
found = true;
break;
}
}
if (found == false) {
filteredSharees.append(sharee);
}
}
beginInsertRows(QModelIndex(), _sharees.size(), filteredSharees.size());
_sharees += filteredSharees;
endInsertRows();
shareesReady();

View file

@ -57,6 +57,7 @@ public:
explicit ShareeModel(AccountPtr account,
const QString search,
const QString type,
const QVector<QSharedPointer<Sharee>> &shareeBlacklist,
QObject *parent = 0);
void fetch();
@ -79,6 +80,7 @@ private:
QString _type;
QVector<QSharedPointer<Sharee>> _sharees;
QVector<QSharedPointer<Sharee>> _shareeBlacklist;
};
}

View file

@ -83,6 +83,7 @@ void ShareUserGroupWidget::on_searchPushButton_clicked()
_completerModel = new ShareeModel(_account,
_ui->shareeLineEdit->text(),
_isFile ? QLatin1String("file") : QLatin1String("folder"),
_sharees,
_completer);
connect(_completerModel, SIGNAL(shareesReady()), SLOT(slotUpdateCompletion()));
_completerModel->fetch();
@ -104,11 +105,14 @@ void ShareUserGroupWidget::slotSharesFetched(const QList<QSharedPointer<Share>>
const QString versionString = _account->serverVersion();
qDebug() << Q_FUNC_INFO << versionString << "Fetched" << shares.count() << "shares";
//FIXME
QLayoutItem *child;
while ((child = _ui->sharesLayout->takeAt(0)) != 0) {
delete child;
}
_sharees.clear();
foreach(const auto &share, shares) {
if (share->getShareType() == Share::TypeLink) {
@ -117,7 +121,14 @@ void ShareUserGroupWidget::slotSharesFetched(const QList<QSharedPointer<Share>>
ShareWidget *s = new ShareWidget(share, this);
_ui->sharesLayout->addWidget(s);
_sharees.append(share->getShareWith());
}
// Add the current user to _sharees since we can't share with ourself
QSharedPointer<Sharee> currentUser(new Sharee(_account->credentials()->user(), "", Sharee::Type::User));
_sharees.append(currentUser);
_ui->sharesLayout->invalidate();
}

View file

@ -21,7 +21,7 @@
#include <QVariantMap>
#include <QSharedPointer>
#include <QList>
#include <QVector>
class QCompleter;
@ -36,6 +36,7 @@ class AbstractCredentials;
class QuotaInfo;
class SyncResult;
class Share;
class Sharee;
class ShareManager;
class ShareeModel;
@ -104,6 +105,7 @@ private:
bool _isFile;
ShareManager *_manager;
QVector<QSharedPointer<Sharee>> _sharees;
};
}