Example #1
0
 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();
             }
         }
     }
 }
Example #2
0
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();
}
Example #3
0
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]));
}
Example #4
0
 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);
 }
Example #5
0
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
}