From 35f5ebb93829885694e78de20677256a85d38d60 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Thu, 10 Mar 2016 15:50:02 -0800 Subject: [PATCH 1/3] Don't allow folder overwrite --- interface/resources/qml/AssetServer.qml | 8 ++++++-- .../scripting/AssetMappingsScriptingInterface.cpp | 13 +++++++++++++ .../src/scripting/AssetMappingsScriptingInterface.h | 6 ++++-- 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/interface/resources/qml/AssetServer.qml b/interface/resources/qml/AssetServer.qml index afb4b50773..768eaa28a2 100644 --- a/interface/resources/qml/AssetServer.qml +++ b/interface/resources/qml/AssetServer.qml @@ -72,12 +72,16 @@ Window { } function doRenameFile(oldPath, newPath) { - console.log("Renaming " + oldPath + " to " + newPath); - if (newPath[0] != "/") { newPath = "/" + newPath; } + if (Assets.isKnownFolder(newPath)) { + box = errorMessageBox("Cannot override existing directory."); + box.selected.connect(reload); + } + + console.log("Renaming " + oldPath + " to " + newPath); Assets.renameMapping(oldPath, newPath, function(err) { if (err) { console.log("Error renaming: ", oldPath, "=>", newPath, " - error ", err); diff --git a/interface/src/scripting/AssetMappingsScriptingInterface.cpp b/interface/src/scripting/AssetMappingsScriptingInterface.cpp index 6ac60ccbdf..ae2ef3183a 100644 --- a/interface/src/scripting/AssetMappingsScriptingInterface.cpp +++ b/interface/src/scripting/AssetMappingsScriptingInterface.cpp @@ -174,6 +174,19 @@ void AssetMappingsScriptingInterface::renameMapping(QString oldPath, QString new request->start(); } +bool AssetMappingModel::isKnownFolder(QString path) const { + if (!path.endsWith("/")) { + return false; + } + + auto existingPaths = _pathToItemMap.keys(); + for (auto& entry : existingPaths) { + if (entry.startsWith(path)) { + return true; + } + } + return false; +} AssetMappingItem::AssetMappingItem(const QString& name, const QString& fullPath, bool isFolder) : name(name), diff --git a/interface/src/scripting/AssetMappingsScriptingInterface.h b/interface/src/scripting/AssetMappingsScriptingInterface.h index 3a7711b340..99ced25d29 100644 --- a/interface/src/scripting/AssetMappingsScriptingInterface.h +++ b/interface/src/scripting/AssetMappingsScriptingInterface.h @@ -35,7 +35,8 @@ public: Q_INVOKABLE void refresh(); - bool isKnownMapping(QString path) const { return _pathToItemMap.contains(path); }; + bool isKnownMapping(QString path) const { return _pathToItemMap.contains(path); } + bool isKnownFolder(QString path) const; signals: void errorGettingMappings(int error); @@ -55,7 +56,8 @@ public: Q_INVOKABLE AssetMappingModel* getAssetMappingModel() { return &_assetMappingModel; } Q_INVOKABLE QAbstractProxyModel* getProxyModel() { return &_proxyModel; } - Q_INVOKABLE bool isKnownMapping(QString path) const { return _assetMappingModel.isKnownMapping(path); }; + Q_INVOKABLE bool isKnownMapping(QString path) const { return _assetMappingModel.isKnownMapping(path); } + Q_INVOKABLE bool isKnownFolder(QString path) const { return _assetMappingModel.isKnownFolder(path); } Q_INVOKABLE QString getErrorString(int errorCode) const; From 16287b70407f87cf55d8b588cc435e5f43fe7a31 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Thu, 10 Mar 2016 16:42:26 -0800 Subject: [PATCH 2/3] Disable add to world for uncompatible files --- interface/resources/qml/AssetServer.qml | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/interface/resources/qml/AssetServer.qml b/interface/resources/qml/AssetServer.qml index 768eaa28a2..4cb69bb3ef 100644 --- a/interface/resources/qml/AssetServer.qml +++ b/interface/resources/qml/AssetServer.qml @@ -114,9 +114,8 @@ Window { }); } - function canAddToWorld() { + function canAddToWorld(path) { var supportedExtensions = [/\.fbx\b/i, /\.obj\b/i]; - var path = assetProxyModel.data(treeView.currentIndex, 0x100); return supportedExtensions.reduce(function(total, current) { return total | new RegExp(current).test(path); @@ -137,7 +136,7 @@ Window { function addToWorld() { var url = assetProxyModel.data(treeView.currentIndex, 0x103); - if (!url) { + if (!url || !canAddToWorld(url)) { return; } var addPosition = Vec3.sum(MyAvatar.position, Vec3.multiply(2, Quat.getFront(MyAvatar.orientation))); @@ -288,7 +287,7 @@ Window { height: 26 width: 120 - enabled: canAddToWorld() + enabled: canAddToWorld(assetProxyModel.data(treeView.currentIndex, 0x100)) onClicked: root.addToWorld() } @@ -408,6 +407,9 @@ Window { anchors.rightMargin: uploadButton.width + hifi.dimensions.contentSpacing.x text: "Add to world on upload" + + enabled: canAddToWorld(fileUrlTextField.text) + checked: false } From 4a9d88d213c74b7f3b5465b852848a4b8536cd66 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Thu, 10 Mar 2016 16:46:35 -0800 Subject: [PATCH 3/3] CR --- interface/resources/qml/AssetServer.qml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/interface/resources/qml/AssetServer.qml b/interface/resources/qml/AssetServer.qml index 4cb69bb3ef..a178374fed 100644 --- a/interface/resources/qml/AssetServer.qml +++ b/interface/resources/qml/AssetServer.qml @@ -77,7 +77,7 @@ Window { } if (Assets.isKnownFolder(newPath)) { - box = errorMessageBox("Cannot override existing directory."); + box = errorMessageBox("Cannot overwrite existing directory."); box.selected.connect(reload); } @@ -408,7 +408,7 @@ Window { text: "Add to world on upload" - enabled: canAddToWorld(fileUrlTextField.text) + opacity: canAddToWorld(fileUrlTextField.text) ? 1 : 0 checked: false }