accountState: root.accountState
shareItemIsFolder: root.fileDetails && root.fileDetails.isFolder
+ shareeBlocklist: root.shareModel.sharees
onShareeSelected: {
root.waitingForSharesToChange = true;
property var accountState: ({})
property bool shareItemIsFolder: false
+ property var shareeBlocklist: ({})
property ShareeModel shareeModel: ShareeModel {
accountState: root.accountState
shareItemIsFolder: root.shareItemIsFolder
searchString: root.text
+ shareeBlocklist: root.shareeBlocklist
}
readonly property int horizontalPaddingOffset: Style.trayHorizontalMargin
Q_EMIT lookupModeChanged();
}
+QVariantList ShareeModel::shareeBlocklist() const
+{
+ QVariantList returnSharees;
+ for (const auto &sharee : _shareeBlocklist) {
+ returnSharees.append(QVariant::fromValue(sharee));
+ }
+ return returnSharees;
+}
+
+void ShareeModel::setShareeBlocklist(const QVariantList shareeBlocklist)
+{
+ _shareeBlocklist.clear();
+ for (const auto &sharee : shareeBlocklist) {
+ _shareeBlocklist.append(sharee.value<ShareePtr>());
+ }
+ Q_EMIT shareeBlocklistChanged();
+
+ filterSharees();
+}
+
// ------------------------- Internal data methods ------------------------- //
void ShareeModel::fetch()
_fetchOngoing = false;
Q_EMIT fetchOngoingChanged();
- qCInfo(lcShareeModel) << "SearchString: " << _searchString << "resulted in reply: " << reply;
+ qCInfo(lcShareeModel) << "Reply: " << reply;
QVector<ShareePtr> newSharees;
const auto shareeJsonObject = sharee.toObject();
const auto parsedSharee = parseSharee(shareeJsonObject);
- // Filter sharees that we have already shared with
- const auto shareeInBlacklistIt = std::find_if(_shareeBlacklist.cbegin(),
- _shareeBlacklist.cend(),
+ const auto shareeInBlacklistIt = std::find_if(_shareeBlocklist.cbegin(),
+ _shareeBlocklist.cend(),
[&parsedSharee](const ShareePtr &blacklistSharee) {
return parsedSharee->type() == blacklistSharee->type() &&
parsedSharee->shareWith() == blacklistSharee->shareWith();
});
- if (shareeInBlacklistIt != _shareeBlacklist.cend()) {
+ if (shareeInBlacklistIt != _shareeBlocklist.cend()) {
continue;
}
return ShareePtr(new Sharee(shareWith, displayName, type));
}
+void ShareeModel::filterSharees()
+{
+ auto it = _sharees.begin();
+
+ while (it != _sharees.end()) {
+ const auto sharee = *it;
+ const auto shareeInBlacklistIt = std::find_if(_shareeBlocklist.cbegin(), _shareeBlocklist.cend(), [&sharee](const ShareePtr &blacklistSharee) {
+ return sharee->type() == blacklistSharee->type() &&
+ sharee->shareWith() == blacklistSharee->shareWith();
+ });
+
+ if (shareeInBlacklistIt != _shareeBlocklist.end()) {
+ const auto row = it - _sharees.begin();
+ beginRemoveRows({}, row, row);
+ it = _sharees.erase(it);
+ endRemoveRows();
+ } else {
+ ++it;
+ }
+ }
+
+ Q_EMIT shareesReady();
+}
+
}
Q_PROPERTY(QString searchString READ searchString WRITE setSearchString NOTIFY searchStringChanged)
Q_PROPERTY(bool fetchOngoing READ fetchOngoing NOTIFY fetchOngoingChanged)
Q_PROPERTY(LookupMode lookupMode READ lookupMode WRITE setLookupMode NOTIFY lookupModeChanged)
+ Q_PROPERTY(QVariantList shareeBlocklist READ shareeBlocklist WRITE setShareeBlocklist NOTIFY shareeBlocklistChanged)
public:
enum class LookupMode {
[[nodiscard]] QString searchString() const;
[[nodiscard]] bool fetchOngoing() const;
[[nodiscard]] LookupMode lookupMode() const;
+ [[nodiscard]] QVariantList shareeBlocklist() const;
signals:
void accountStateChanged();
void searchStringChanged();
void fetchOngoingChanged();
void lookupModeChanged();
+ void shareeBlocklistChanged();
void shareesReady();
- void displayErrorMessage(int code, const QString &);
+ void displayErrorMessage(const int code, const QString &message);
public slots:
void setAccountState(AccountState *accountState);
void setShareItemIsFolder(const bool shareItemIsFolder);
void setSearchString(const QString &searchString);
void setLookupMode(const LookupMode lookupMode);
+ void setShareeBlocklist(const QVariantList shareeBlocklist);
void fetch();
private slots:
- void shareesFetched(const QJsonDocument &reply);
+ void shareesFetched(const QJsonDocument &reply);
+ void filterSharees();
private:
[[nodiscard]] ShareePtr parseSharee(const QJsonObject &data) const;
LookupMode _lookupMode = LookupMode::LocalSearch;
QVector<ShareePtr> _sharees;
- QVector<ShareePtr> _shareeBlacklist;
+ QVector<ShareePtr> _shareeBlocklist;
};
}
_shares.clear();
_fetchOngoing = false;
_hasInitialShareFetchCompleted = false;
+ _sharees.clear();
Q_EMIT fetchOngoingChanged();
Q_EMIT hasInitialShareFetchCompletedChanged();
+ Q_EMIT shareesChanged();
endResetModel();
}
_shares.append(share);
endInsertRows();
+ slotAddSharee(share->getShareWith());
+
shareModelIndex = index(shareIndex);
}
return;
}
+ const auto share = shareIndex.data(ShareModel::ShareRole).value<SharePtr>();
+ const auto sharee = share->getShareWith();
+ slotRemoveSharee(sharee);
+
beginRemoveRows({}, shareIndex.row(), shareIndex.row());
_shares.removeAt(shareIndex.row());
endRemoveRows();
Q_EMIT serverError(code, message);
}
+void ShareModel::slotAddSharee(const ShareePtr &sharee)
+{
+ if(!sharee) {
+ return;
+ }
+
+ _sharees.append(sharee);
+ Q_EMIT shareesChanged();
+}
+
+void ShareModel::slotRemoveSharee(const ShareePtr &sharee)
+{
+ _sharees.removeAll(sharee);
+ Q_EMIT shareesChanged();
+}
+
QString ShareModel::displayStringForShare(const SharePtr &share) const
{
if (const auto linkShare = share.objectCast<LinkShare>()) {
return _maxSharingPermissions & SharePermissionShare;
}
+QVariantList ShareModel::sharees() const
+{
+ QVariantList returnSharees;
+ for (const auto &sharee : _sharees) {
+ returnSharees.append(QVariant::fromValue(sharee));
+ }
+ return returnSharees;
+}
+
} // namespace OCC
Q_PROPERTY(bool canShare READ canShare NOTIFY sharePermissionsChanged)
Q_PROPERTY(bool fetchOngoing READ fetchOngoing NOTIFY fetchOngoingChanged)
Q_PROPERTY(bool hasInitialShareFetchCompleted READ hasInitialShareFetchCompleted NOTIFY hasInitialShareFetchCompletedChanged)
+ Q_PROPERTY(QVariantList sharees READ sharees NOTIFY shareesChanged)
public:
enum Roles {
[[nodiscard]] bool fetchOngoing() const;
[[nodiscard]] bool hasInitialShareFetchCompleted() const;
+ [[nodiscard]] QVariantList sharees() const;
+
signals:
void localPathChanged();
void accountStateChanged();
void lockExpireStringChanged();
void fetchOngoingChanged();
void hasInitialShareFetchCompletedChanged();
+ void shareesChanged();
void serverError(const int code, const QString &message);
void passwordSetError(const QString &shareId, const int code, const QString &message);
void slotAddShare(const SharePtr &share);
void slotRemoveShareWithId(const QString &shareId);
void slotSharesFetched(const QList<SharePtr> &shares);
+ void slotAddSharee(const ShareePtr &sharee);
+ void slotRemoveSharee(const ShareePtr &sharee);
void slotSharePermissionsSet(const QString &shareId);
void slotSharePasswordSet(const QString &shareId);
QVector<SharePtr> _shares;
QHash<QString, QPersistentModelIndex> _shareIdIndexHash;
QHash<QString, QString> _shareIdRecentlySetPasswords;
+ QVector<ShareePtr> _sharees;
};
} // namespace OCC