diff --git a/toonz/sources/common/tsystem/tsystem.cpp b/toonz/sources/common/tsystem/tsystem.cpp index 19329e5..f99d80f 100644 --- a/toonz/sources/common/tsystem/tsystem.cpp +++ b/toonz/sources/common/tsystem/tsystem.cpp @@ -464,6 +464,13 @@ void TSystem::readDirectory_DirItems(QStringList &dst, const TFilePath &path) { QDir dir(toQString(path)); #ifdef _WIN32 + QString pathStr = toQString(path); + if (pathStr.startsWith("\\\\") || pathStr.startsWith("//")) { + dst = dir.entryList(QDir::AllDirs | QDir::NoDotAndDotDot | QDir::Readable, + QDir::Name | QDir::LocaleAware); + return; + } + // equivalent to sorting with QDir::LocaleAware auto const strCompare = [](const QString &s1, const QString &s2) { return QString::localeAwareCompare(s1, s2) < 0; diff --git a/toonz/sources/toonz/filebrowsermodel.cpp b/toonz/sources/toonz/filebrowsermodel.cpp index b0e0ceb..3371b58 100644 --- a/toonz/sources/toonz/filebrowsermodel.cpp +++ b/toonz/sources/toonz/filebrowsermodel.cpp @@ -197,7 +197,7 @@ bool DvDirModelFileFolderNode::exists() { return m_existsChecked ? m_exists : m_peeks ? m_existsChecked = true, - m_exists = TFileStatus(m_path).doesExist() : true; + m_exists = TFileStatus(m_path).doesExist() : true; } //----------------------------------------------------------------------------- @@ -1019,6 +1019,24 @@ QPixmap DvDirModelNetworkNode::getPixmap(bool isOpen) const { return pixmap; } +//----------------------------------------------------------------------------- + +DvDirModelNode *DvDirModelNetworkNode::createNetworkFolderNode( + const TFilePath &path) { + QDir networkDir(path.getQString()); + while (networkDir.cdUp()) { + } + TFilePath networkDirPath(networkDir.absolutePath()); + + DvDirModelFileFolderNode *child = new DvDirModelFileFolderNode( + this, networkDirPath.getWideString(), networkDirPath); + child->setPeeking(false); + + addChild(child); + + return child->getNodeByPath(path); +} + //============================================================================= // // DvDirModelRootNode [Root] @@ -1211,6 +1229,14 @@ DvDirModelNode *DvDirModelRootNode::getNodeByPath(const TFilePath &path) { DvDirModelNode *node = m_networkNode->getChild(i)->getNodeByPath(path); if (node) return node; } + + // try to find in the network + QString pathStr = path.getQString(); + if ((pathStr.startsWith("\\\\") || pathStr.startsWith("//")) && + QDir(pathStr).exists()) { + DvDirModelNode *node = m_networkNode->createNetworkFolderNode(path); + if (node) return node; + } } return 0; @@ -1248,7 +1274,6 @@ void DvDirModelRootNode::updateSceneFolderNodeVisibility(bool forceHide) { m_sceneFolderNode->setRow(-1); } } - //============================================================================= // // DvDirModel diff --git a/toonz/sources/toonz/filebrowsermodel.h b/toonz/sources/toonz/filebrowsermodel.h index 5680591..0d374d5 100644 --- a/toonz/sources/toonz/filebrowsermodel.h +++ b/toonz/sources/toonz/filebrowsermodel.h @@ -300,6 +300,7 @@ public: void refreshChildren() override; QPixmap getPixmap(bool isOpen) const override; bool isFolder() const override { return true; } + DvDirModelNode *createNetworkFolderNode(const TFilePath &path); }; //-----------------------------------------------------------------------------