void MapTree::unloadMap(const std::string& dirFileName, unsigned int pMapTileIdent, bool pForce) { if(hasDirFile(dirFileName) && (pForce || containsLoadedMapTile(pMapTileIdent))) { if(containsLoadedMapTile(pMapTileIdent)) removeLoadedMapTile(pMapTileIdent); FilesInDir& filesInDir = getDirFiles(dirFileName); filesInDir.decRefCount(); if(filesInDir.getRefCount() <= 0) { Array<std::string> fileNames = filesInDir.getFiles(); bool treeChanged = false; for(int i=0; i<fileNames.size(); ++i) { std::string name = fileNames[i]; ManagedModelContainer* mc = getModelContainer(name); mc->decRefCount(); if(mc->getRefCount() <= 0) { iLoadedModelContainer.remove(name); iTree->remove(mc); delete mc; treeChanged = true; } } iLoadedDirFiles.remove(dirFileName); if(treeChanged) { iTree->balance(); } } } }
void MainWindow::loadNextFeatures() { QFileInfo fdir(app().options().features); if (!fdir.isDir()) return; QStringList patterns; getFeaturePatterns(patterns); QStringList files = getDirFiles(app().options().features, patterns); if (files.isEmpty()) return; QFileInfo info(model->getFeaturesFilename()); int index = files.indexOf(info.fileName()); if (index < 0 || index >= files.size()) // maybe the file was deleted recently? index = 0; else if (files.size() == 1) return; if (index == files.size() - 1) model->loadFeatures(fdir.dir().filePath(files.first())); else model->loadFeatures(fdir.dir().filePath(files[index + 1])); qDebug() << "Loaded features " << model->getFeaturesFilename(); }
void MainWindow::loadNextModel() { QStringList patterns; getMeshPatterns(patterns); QStringList files = getDirFiles(model->getFilename(), patterns); if (files.isEmpty()) return; QFileInfo info(model->getFilename()); int index = files.indexOf(info.fileName()); if (index < 0 || index >= files.size()) // maybe the file was deleted recently? index = 0; else if (files.size() == 1) return; clearOverlays(); if (index == files.size() - 1) model->load(info.dir().filePath(files.first())); else model->load(info.dir().filePath(files[index + 1])); }
bool MapTree::loadMap(const std::string& pDirFileName, unsigned int pMapTileIdent) { bool result = true; if(!hasDirFile(pDirFileName)) { FilesInDir filesInDir; result = false; std::string fb = iBasePath + pDirFileName; FILE* df = fopen(fb.c_str(), "rb"); if(df) { char lineBuffer[FILENAMEBUFFER_SIZE]; result = true; bool newModelLoaded = false; while(result && (fgets(lineBuffer, FILENAMEBUFFER_SIZE-1, df) != 0)) { std::string name = std::string(lineBuffer); chomp(name); if(name.length() >1) { filesInDir.append(name); ManagedModelContainer *mc; if(!isAlreadyLoaded(name)) { std::string fname = iBasePath; fname.append(name); mc = new ManagedModelContainer(); result = mc->readFile(fname.c_str()); if(result) { addModelContainer(name, mc); newModelLoaded = true; } } else { mc = getModelContainer(name); } mc->incRefCount(); } } if(result && newModelLoaded) { iTree->balance(); } if(result && ferror(df) != 0) { result = false; } fclose(df); if(result) { filesInDir.incRefCount(); addDirFile(pDirFileName, filesInDir); setLoadedMapTile(pMapTileIdent); } } } else { // Already loaded, so just inc. the ref count if mapTileIdent is new if(!containsLoadedMapTile(pMapTileIdent)) { setLoadedMapTile(pMapTileIdent); FilesInDir& filesInDir = getDirFiles(pDirFileName); filesInDir.incRefCount(); } } return (result); }
void HTTPServer::onUrlRequested ( MyString req, SOCKET sock ) { if ( req.find ( ".." ) !=-1 || req.find ( "/.ht" ) !=-1 || req.endsWith ( "~" ) ) { // evil hacker trying to read non-wwwhome or secret file errorReport ( sock, "403", "Forbidden", "You don't have permission to access the requested URL." ); } else { MyString path = req; MyFile f ( path ); if ( f.isDirectory() && !path.endsWith ( "/" ) ) { // redirect browser if referring to directory without final '/' path += "/"; } if ( f.isDirectory() ) { #if defined(FULLDEBUG) || defined(DEBUG) mLog ( "Is a directory: " + path ); #endif // if directory, implicitly add 'index.html' string header; header = ( string ) "HTTP/1.1 200 OK\r\n" + "Content-Type: text/html\r\n"; string length = "Content-Length: "; string html_header = "<html><body>"; // out all files here string files; getDirFiles ( path, &files ); string html_footer = "</body></html>\r\n\r\n"; string data = html_header + files + html_footer; //count content-length. stringstream sstm; sstm << data.length(); length += sstm.str() + "\r\n\r\n"; data = header + length + html_header + files + html_footer; int n = write ( sock, data.c_str(), data.length() +1 ); if ( n < 0 ) { mLog ( "ERROR writing to socket" ); exit ( 1 ); } #ifdef FULLDEBUG mLog ( "Wrote: " + data ); #endif } else { try { // send files MyString temp; temp = ( string ) "HTTP/1.0 200 OK\r\n"; temp += "Content-Type: " + guessContentType ( path ) + "\r\n"; string data; parseFile ( sock, path, &data ); // send raw file //count content-length. string length = "Content-Length: "; stringstream sstm; sstm << data.length(); length += sstm.str() + "\r\n\r\n"; temp += length + data; int n = write ( sock, temp.c_str(), temp.length() ); if ( n < 0 ) { mLog ( "ERROR writing to socket" ); exit ( 1 ); } #if defined(DEBUG) || defined(FULLDEBUG) mLog ( "200 OK" ); #endif } catch ( ... ) { // file not found errorReport ( sock, "404", "Not Found", "The requested URL was not found on this server." ); }//try-catch }//else }//else }