From cee8b66ce99fa5dac2ee32f249d756a4ce1e523a Mon Sep 17 00:00:00 2001 From: David Rowe Date: Tue, 1 Nov 2016 13:26:05 +1300 Subject: [PATCH] Handle duplicate Clara download asset names --- interface/src/Application.cpp | 27 ++++++++++++++++++++++++++- interface/src/Application.h | 1 + 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index cd5fd08ea3..3b4b457e14 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -5344,7 +5344,32 @@ void Application::addAssetToWorld(QString filePath) { QString path = QUrl(filePath).toLocalFile(); QString mapping = path.right(path.length() - path.lastIndexOf("/")); - addAssetToWorldUpload(path, mapping); + addAssetToWorldWithNewMapping(path, mapping, 0); +} + +void Application::addAssetToWorldWithNewMapping(QString path, QString mapping, int copy) { + auto request = DependencyManager::get()->createGetMappingRequest(mapping); + QObject::connect(request, &GetMappingRequest::finished, this, [=](GetMappingRequest* request) mutable { + const int MAX_COPY_COUNT = 100; // Limit number of duplicate assets; recursion guard. + if (request->getError() == GetMappingRequest::NotFound) { + addAssetToWorldUpload(path, mapping); + } else if (copy < MAX_COPY_COUNT - 1) { + if (copy > 0) { + mapping = mapping.remove(mapping.lastIndexOf("-"), QString::number(copy).length() + 1); + } + copy++; + mapping = mapping.insert(mapping.lastIndexOf("."), "-" + QString::number(copy)); + addAssetToWorldWithNewMapping(path, mapping, copy); + } else { + QString errorInfo = "Too many copies of asset name: " + + mapping.left(mapping.length() - QString::number(copy).length() - 1); + qCDebug(interfaceapp) << "Error downloading asset: " + errorInfo; + OffscreenUi::warning("Error Downloading Asset", errorInfo); + } + request->deleteLater(); + }); + + request->start(); } void Application::addAssetToWorldUpload(QString path, QString mapping) { diff --git a/interface/src/Application.h b/interface/src/Application.h index 0ba91adb55..4c31e8d121 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -307,6 +307,7 @@ public slots: void toggleRunningScriptsWidget() const; Q_INVOKABLE void showAssetServerWidget(QString filePath = ""); void addAssetToWorld(QString filePath); + void addAssetToWorldWithNewMapping(QString path, QString mapping, int copy); void addAssetToWorldUpload(QString path, QString mapping); void addAssetToWorldSetMapping(QString mapping, QString hash); void addAssetToWorldAddEntity(QString mapping);