From 40d307a37b4e15be29fa94153e8bf12ce2ebc4ea Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Fri, 26 Feb 2016 10:37:19 -0800 Subject: [PATCH] Temporary fix to disk cache editor crash --- interface/src/Application.cpp | 6 ++---- interface/src/ui/DiskCacheEditor.cpp | 8 ++++---- libraries/networking/src/AssetClient.cpp | 9 +++++++++ libraries/networking/src/AssetClient.h | 1 + 4 files changed, 16 insertions(+), 8 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 8e2b2175fe..36c882647f 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -1072,10 +1072,8 @@ void Application::cleanupBeforeQuit() { } void Application::emptyLocalCache() { - if (auto cache = NetworkAccessManager::getInstance().cache()) { - qDebug() << "DiskCacheEditor::clear(): Clearing disk cache."; - cache->clear(); - } + auto assetClient = DependencyManager::get(); + QMetaObject::invokeMethod(assetClient.data(), "clearCache", Qt::QueuedConnection); } Application::~Application() { diff --git a/interface/src/ui/DiskCacheEditor.cpp b/interface/src/ui/DiskCacheEditor.cpp index d3a40e6439..e2f64d8817 100644 --- a/interface/src/ui/DiskCacheEditor.cpp +++ b/interface/src/ui/DiskCacheEditor.cpp @@ -122,6 +122,7 @@ void DiskCacheEditor::refresh() { } return QString("%0 %1").arg(number).arg(UNITS[i]); }; + return; QNetworkDiskCache* cache = qobject_cast(NetworkAccessManager::getInstance().cache()); if (_path) { @@ -135,6 +136,7 @@ void DiskCacheEditor::refresh() { } } +#include void DiskCacheEditor::clear() { QMessageBox::StandardButton buttonClicked = OffscreenUi::question(_dialog, "Clearing disk cache", @@ -142,10 +144,8 @@ void DiskCacheEditor::clear() { "are you sure you want to do that?", QMessageBox::Ok | QMessageBox::Cancel); if (buttonClicked == QMessageBox::Ok) { - if (auto cache = NetworkAccessManager::getInstance().cache()) { - qDebug() << "DiskCacheEditor::clear(): Clearing disk cache."; - cache->clear(); - } + auto assetClient = DependencyManager::get(); + QMetaObject::invokeMethod(assetClient.data() , "clearCache", Qt::QueuedConnection); } refresh(); } diff --git a/libraries/networking/src/AssetClient.cpp b/libraries/networking/src/AssetClient.cpp index 203d4d9ba6..28fb31fdfd 100644 --- a/libraries/networking/src/AssetClient.cpp +++ b/libraries/networking/src/AssetClient.cpp @@ -64,6 +64,15 @@ void AssetClient::init() { } } +void AssetClient::clearCache() { + Q_ASSERT(QThread::currentThread() == thread()); + + if (auto cache = NetworkAccessManager::getInstance().cache()) { + qDebug() << "AssetClient::clearCache(): Clearing disk cache."; + cache->clear(); + } +} + bool haveAssetServer() { auto nodeList = DependencyManager::get(); SharedNodePointer assetServer = nodeList->soloNodeOfType(NodeType::AssetServer); diff --git a/libraries/networking/src/AssetClient.h b/libraries/networking/src/AssetClient.h index 67ce4daa8f..93b54d6df3 100644 --- a/libraries/networking/src/AssetClient.h +++ b/libraries/networking/src/AssetClient.h @@ -50,6 +50,7 @@ public: public slots: void init(); + void clearCache(); private slots: void handleAssetGetInfoReply(QSharedPointer message, SharedNodePointer senderNode);