예제 #1
0
bool extractPythonLibrary()
{
    QString source(":/io/thp/pyotherside/pythonlib.zip");
    QString destdir(QStandardPaths::writableLocation(QStandardPaths::TempLocation));
    QString destination(QDir(destdir).filePath("pythonlib.zip"));
    prependPythonPath(destination);

    if (QFile::exists(destination)) {
        return true;
    }

    return QFile::copy(source, destination);
}
예제 #2
0
static int copy_files(const boost::program_options::variables_map &vm) {

  std::unique_ptr<edm::SiteLocalConfig> slcptr = std::make_unique<edm::service::SiteLocalConfigService>(edm::ParameterSet());
  auto slc = std::make_shared<edm::serviceregistry::ServiceWrapper<edm::SiteLocalConfig> >(std::move(slcptr));
  edm::ServiceToken slcToken = edm::ServiceRegistry::createContaining(slc);
  edm::ServiceRegistry::Operate operate(slcToken);

  auto in = (vm.count("file") ? vm["file"].as<std::vector<std::string> >() : std::vector<std::string>());

  if (in.size() < 2) {
    std::cerr << "Not enough arguments!" << std::endl;
    std::cerr << "Usage: edmCopyUtil [file1] [file2] [file3] dest_dir" << std::endl;
    return 1;
  }

  boost::filesystem::path destdir(in.back());
  in.pop_back();

  if (!boost::filesystem::is_directory(destdir)) {
    std::cerr << "Last argument must be destination directory; " << destdir << " is not a directory!" << std::endl;
    return 1;
  }

  std::string catalogIn = (vm.count("catalog") ? vm["catalog"].as<std::string>() : std::string());
  edm::InputFileCatalog catalog(in, catalogIn, true);
  std::vector<std::string> const& filesIn = catalog.fileNames();

  for(unsigned int j = 0; j < in.size(); ++j) {
    boost::filesystem::path pathOut = destdir;
    pathOut /= boost::filesystem::path(in[j]).filename();

    boost::filesystem::ofstream ofs;
    ofs.exceptions(std::ofstream::failbit | std::ofstream::badbit);
    ofs.open(pathOut);

    std::unique_ptr<Storage> s = StorageFactory::get()->open(filesIn[j]);
    assert(s); // StorageFactory should throw if file open fails.

    static unsigned int const COPYBUFSIZE = 10*1024*1024; // 10MB buffer
    std::vector<char> buffer; buffer.reserve(COPYBUFSIZE);

    IOSize n;
    while ((n = s->read(&buffer[0], COPYBUFSIZE))) { // Note Storage throws on error
      ofs.write(&buffer[0], n);
    }
    ofs.close();
    s->close();
  }

  return 0;
}
예제 #3
0
bool extractPythonLibrary()
{
    QString source(":/io/thp/pyotherside/pythonlib.zip");
    QString destdir(QStandardPaths::writableLocation(QStandardPaths::TempLocation));
    QString destination(QDir(destdir).filePath("pythonlib.zip"));

    // Our embedded Python library should have priority over other path elements
    qputenv("PYTHONPATH", (destination + ":" + QString::fromUtf8(qgetenv("PYTHONPATH"))).toUtf8());

    if (QFile::exists(destination)) {
        return true;
    }

    return QFile::copy(source, destination);
}
예제 #4
0
bool Downloader::scanFtpDir(FtpDir *ftpDir, tstring destsubdir)
{
    Url url(ftpDir->url);
    url.internetOptions = internetOptions;
    
    updateFileName(url.components.lpszUrlPath);
    
    if(!url.connect(internet))
    {
        storeError();
        return false;
    }
    
    if(!FtpSetCurrentDirectory(url.connection, url.components.lpszUrlPath))
    {
        storeError();
        return false;
    }
    
    list<tstring> dirs;
    WIN32_FIND_DATA fd;

    TRACE(_T("Scanning FTP dir %s:"), ftpDir->url.c_str());
    HINTERNET handle = FtpFindFirstFile(url.connection, ftpDir->mask.c_str(), &fd, NULL, NULL);

    if(handle)
    {
        TRACE(_T("    (%s) %s"), (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ? _T("D") : _T("F"), fd.cFileName);
        updateFileName(tstring(fd.cFileName));

        if(fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
        {
            tstring dirname(fd.cFileName);

            if(!(dirname.compare(_T(".")) == 0) && !(dirname.compare(_T("..")) == 0))
                dirs.push_back(dirname);
        }
        else
        {
            tstring fileUrl  = addslash(ftpDir->url);
            tstring fileName = addbackslash(ftpDir->destdir);
            fileUrl  += tstring(fd.cFileName);
            fileName += addbackslash(destsubdir);
            fileName += tstring(fd.cFileName);
            
            addFile(fileUrl, fileName, ((DWORDLONG)fd.nFileSizeHigh << 32) | fd.nFileSizeLow, ftpDir->compstr);
        }

        while(InternetFindNextFile(handle, &fd))
        {
            TRACE(_T("    (%s) %s"), (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ? _T("D") : _T("F"), fd.cFileName);
            updateFileName(tstring(fd.cFileName));

            if(fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
            {
                tstring dirname(fd.cFileName);

                if(!(dirname.compare(_T(".")) == 0) && !(dirname.compare(_T("..")) == 0))
                    dirs.push_back(dirname);
            }
            else
            {
                tstring fileUrl  = addslash(ftpDir->url);
                tstring fileName = addbackslash(ftpDir->destdir);
                fileUrl  += tstring(fd.cFileName);
                fileName += addbackslash(destsubdir);
                fileName += tstring(fd.cFileName);
                
                addFile(fileUrl, fileName, ((DWORDLONG)fd.nFileSizeHigh << 32) | fd.nFileSizeLow, ftpDir->compstr);
            }
        }
    }

    url.disconnect();

    if(ftpDir->recursive && !dirs.empty())
    {
        for(list<tstring>::iterator i = dirs.begin(); i != dirs.end(); i++)
        {
            tstring dir = *i;

            tstring urlstr = addslash(ftpDir->url);
            urlstr += dir;
            FtpDir fdir(urlstr, ftpDir->mask, ftpDir->destdir, ftpDir->recursive, ftpDir->compstr);
            
            if(preserveFtpDirs)
            {
                tstring destdir(addbackslash(ftpDir->destdir));
                destdir += addbackslash(destsubdir);
                destdir += dir;
                TRACE(_T("Creating directory %s"), destdir.c_str());
                _tmkdir(destdir.c_str());

                tstring subdir = addbackslash(destsubdir);
                subdir += dir;
                scanFtpDir(&fdir, subdir);
            }
            else
                scanFtpDir(&fdir);
        }
    }

    return true;
}