From 78f2a8c566425bf94a23b02c9206fb13ec0dbf84 Mon Sep 17 00:00:00 2001 From: Gabriel Calero Date: Tue, 19 Dec 2017 17:03:29 -0300 Subject: [PATCH] Copy scripts from android assets at startup --- interface/src/main.cpp | 5 +++++ libraries/shared/src/PathUtils.cpp | 29 +++++++++++++++++++++++++++++ libraries/shared/src/PathUtils.h | 1 + 3 files changed, 35 insertions(+) diff --git a/interface/src/main.cpp b/interface/src/main.cpp index 5c07bebc23..ba555d6dad 100644 --- a/interface/src/main.cpp +++ b/interface/src/main.cpp @@ -105,6 +105,11 @@ int main(int argc, const char* argv[]) { if (allowMultipleInstances) { instanceMightBeRunning = false; } + QFileInfo fInfo("assets:/scripts/test.js"); + QDir dirInfo(QStandardPaths::writableLocation(QStandardPaths::CacheLocation)); + QUrl androidPath = QUrl::fromLocalFile(dirInfo.canonicalPath() + "/scripts"); + PathUtils::copyDirDeep("assets:/scripts", androidPath.toLocalFile()); + // this needs to be done here in main, as the mechanism for setting the // scripts directory appears not to work. See the bug report // https://highfidelity.fogbugz.com/f/cases/5759/Issues-changing-scripts-directory-in-ScriptsEngine diff --git a/libraries/shared/src/PathUtils.cpp b/libraries/shared/src/PathUtils.cpp index b33b330fc0..b230917db9 100644 --- a/libraries/shared/src/PathUtils.cpp +++ b/libraries/shared/src/PathUtils.cpp @@ -17,6 +17,7 @@ #include #include #include +#include #include #include #include @@ -203,3 +204,31 @@ bool PathUtils::isDescendantOf(const QUrl& childURL, const QUrl& parentURL) { QString parent = stripFilename(parentURL); return child.startsWith(parent, PathUtils::getFSCaseSensitivity()); } + +void PathUtils::copyDirDeep(QString src, QString dst) { + QDir dir = QDir::root(); + dir.mkpath(dst); + QDirIterator it(src, QStringList() << "*", QDir::Files|QDir::AllDirs, QDirIterator::Subdirectories); + while (it.hasNext()) { + QString f = it.next(); + QFileInfo fInfo(f); + QString newDst = dst + (dst.endsWith("/")?"":"/") + fInfo.fileName(); + if (fInfo.isFile()) { + QFile dfile(f); + if (dfile.exists(f)) + { + if (dfile.copy(newDst)) { + QFile::setPermissions(newDst, QFile::ReadOwner); + } else { + QFile::setPermissions(newDst, QFile::ReadOwner); + // sometimes copy returns false but it worked anyway + //qWarning() << "Could not copy to " << newDst; + } + } + } else if (fInfo.isDir() ) { + copyDirDeep(f, newDst); + } + } +} + + diff --git a/libraries/shared/src/PathUtils.h b/libraries/shared/src/PathUtils.h index 2b4fe35d97..6991c91258 100644 --- a/libraries/shared/src/PathUtils.h +++ b/libraries/shared/src/PathUtils.h @@ -54,6 +54,7 @@ public: // note: this is FS-case-sensitive version of parentURL.isParentOf(childURL) static bool isDescendantOf(const QUrl& childURL, const QUrl& parentURL); static QUrl defaultScriptsLocation(const QString& newDefault = ""); + static void copyDirDeep(QString src, QString dst); };