Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
May 15, 2006, 2:41:51 PM (18 years ago)
Author:
bensch
Message:

more file stuff in File-class

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/qt_gui/src/lib/util/loading/resource_manager.cc

    r7611 r7616  
    8686bool ResourceManager::setDataDir(const std::string& dataDir)
    8787{
    88   std::string realDir = ResourceManager::homeDirCheck(dataDir);
    89   if (isDir(realDir))
    90   {
    91     if (dataDir[dataDir.size()-1] == '/' || dataDir[dataDir.size()-1] == '\\')
     88  File dataDirectory(dataDir);
     89  if (dataDirectory.isDirectory())
     90  {
     91    this->dataDir = dataDirectory.name();
     92
     93    if (dataDir[dataDir.size()-1] != '/' && dataDir[dataDir.size()-1] != '\\')
    9294    {
    93       this->dataDir = realDir;
    94     }
    95     else
    96     {
    97       this->dataDir = realDir;
    9895      this->dataDir += '/';
    9996    }
     
    10299  else
    103100  {
    104     PRINTF(1)("%s is not a Directory, and can not be the Data Directory, leaving as %s \n", realDir.c_str(), this->dataDir.c_str());
     101    PRINTF(1)("%s is not a Directory, and can not be the Data Directory, leaving as %s \n", dataDir.c_str(), this->dataDir.c_str());
    105102    return false;
    106103  }
     
    115112bool ResourceManager::tryDataDir(const std::string& dataDir)
    116113{
    117   std::string realDir = ResourceManager::homeDirCheck(dataDir);
    118   if (isDir(realDir))
    119   {
    120     if (dataDir[dataDir.size()-1] == '/' || dataDir[dataDir.size()-1] == '\\')
     114  File dataDirectory(dataDir);
     115  if (dataDirectory.isDirectory())
     116  {
     117    this->dataDir = dataDirectory.name();
     118
     119    if (dataDir[dataDir.size()-1] != '/' && dataDir[dataDir.size()-1] != '\\')
    121120    {
    122       this->dataDir = realDir;
    123     }
    124     else
    125     {
    126       this->dataDir = realDir;
    127121      this->dataDir += '/';
    128122    }
     
    139133bool ResourceManager::verifyDataDir(const std::string& fileInside)
    140134{
    141   bool retVal;
    142   if (!isDir(this->dataDir))
    143   {
    144     PRINTF(1)("%s is not a directory\n", this->dataDir.c_str());
     135  File dataDirectory(this->dataDir);
     136  if (!dataDirectory.isDirectory())
     137  {
     138    PRINTF(1)("'%s' is not a directory\n", this->dataDir.c_str());
    145139    return false;
    146140  }
    147141
    148   std::string testFile = this->dataDir + fileInside;
    149   retVal = isFile(testFile);
    150   return retVal;
     142  File testFile(this->dataDir + fileInside);
     143  return testFile.isFile();
    151144}
    152145
     
    160153bool ResourceManager::addImageDir(const std::string& imageDir)
    161154{
    162   std::string newDir;
    163   if (imageDir[imageDir.size()-1] == '/' || imageDir[imageDir.size()-1] == '\\')
    164   {
    165     newDir = imageDir;
    166   }
    167   else
    168   {
    169     newDir = imageDir;
     155  std::string newDir = imageDir;
     156  if (imageDir[imageDir.size()-1] != '/' && imageDir[imageDir.size()-1] != '\\')
     157  {
    170158    newDir += '/';
    171159  }
    172160  // check if the param is a Directory
    173   if (isDir(newDir))
     161  if (File(newDir).isDirectory())
    174162  {
    175163    // check if the Directory has been added before
     
    380368        tmpResource->param[0] = 1.0f;
    381369
    382       if(ResourceManager::isFile(fullName))
     370      if(File(fullName).isFile())
    383371        tmpResource->pointer = new OBJModel(fullName, tmpResource->param[0].getFloat());
    384372      else
     
    406394      break;
    407395    case MD2:
    408       if(ResourceManager::isFile(fullName))
     396      if(File(fullName).isFile())
    409397      {
    410398        tmpResource->param[0] = param0;
     
    424412        tmpResource->param[0] = FONT_DEFAULT_RENDER_SIZE;
    425413
    426       if(isFile(fullName))
     414      if(File(fullName).isFile())
    427415        tmpResource->pointer = new Font(fullName, (unsigned int) tmpResource->param[0].getInt());
    428416      else
     
    432420#ifndef NO_AUDIO
    433421    case WAV:
    434       if(isFile(fullName))
     422      if(File(fullName).isFile())
    435423        tmpResource->pointer = new OrxSound::SoundBuffer(fullName);
    436424      break;
    437425    case OGG:
    438       if (isFile(fullName))
     426      if (File(fullName).isFile())
    439427        tmpResource->pointer = new OrxSound::OggPlayer(fullName);
    440428      break;
     
    446434      else
    447435        tmpResource->param[0] = GL_TEXTURE_2D;
    448       if(isFile(fullName))
     436      if(File(fullName).isFile())
    449437      {
    450438        PRINTF(4)("Image %s resides to %s\n", fileName, fullName);
     
    457445        {
    458446          std::string imgName = *imageDir + fileName;
    459           if(isFile(imgName))
     447          if(File(imgName).isFile())
    460448          {
    461449            PRINTF(4)("Image %s resides to %s\n", fileName, imgName);
     
    471459#ifndef NO_SHADERS
    472460    case SHADER:
    473       if(ResourceManager::isFile(fullName))
     461      if(File(fullName).isFile())
    474462      {
    475463        if (param0 != MT_NULL)
     
    477465          MultiType param = param0; /// HACK
    478466          std::string secFullName = ResourceManager::getFullName(param.getCString());
    479           if (ResourceManager::isFile(secFullName))
     467          if (File(secFullName).isFile())
    480468          {
    481469            tmpResource->param[0] = secFullName;
     
    749737
    750738/**
    751  * @brief Checks if it is a Directory
    752  * @param directoryName the Directory to check for
    753  * @returns true if it is a directory/symlink false otherwise
    754 */
    755 bool ResourceManager::isDir(const std::string& directoryName)
    756 {
    757   std::string tmpDirName = directoryName;
    758   struct stat status;
    759 
    760   // checking for the termination of the string given. If there is a "/" at the end cut it away
    761   if (directoryName[directoryName.size()-1] == '/' ||
    762       directoryName[directoryName.size()-1] == '\\')
    763   {
    764     tmpDirName.erase(tmpDirName.size()-1);
    765   }
    766 
    767   if(!stat(tmpDirName.c_str(), &status))
    768   {
    769     if (status.st_mode & (S_IFDIR
    770 #ifndef __WIN32__
    771                           | S_IFLNK
    772 #endif
    773                          ))
    774     {
    775       return true;
    776     }
    777     else
    778       return false;
    779   }
    780   else
    781     return false;
    782 }
    783 
    784 /**
    785  * @brief Checks if the file is either a Regular file or a Symlink
    786  * @param fileName the File to check for
    787  * @returns true if it is a regular file/symlink, false otherwise
    788 */
    789 bool ResourceManager::isFile(const std::string& fileName)
    790 {
    791   if (fileName.empty())
    792     return false;
    793   std::string tmpFileName = ResourceManager::homeDirCheck(fileName);
    794   // actually checks the File
    795   struct stat status;
    796   if (!stat(tmpFileName.c_str(), &status))
    797   {
    798     if (status.st_mode & (S_IFREG
    799 #ifndef __WIN32__
    800                           | S_IFLNK
    801 #endif
    802                          ))
    803     {
    804       return true;
    805     }
    806     else
    807       return false;
    808   }
    809   else
    810     return false;
    811 }
    812 
    813 /**
    814  * @brief touches a File on the disk (thereby creating it)
    815  * @param fileName The file to touch
    816 */
    817 bool ResourceManager::touchFile(const std::string& fileName)
    818 {
    819   std::string tmpName = ResourceManager::homeDirCheck(fileName);
    820   if (tmpName.empty())
    821     return false;
    822   FILE* stream;
    823   if( (stream = fopen (tmpName.c_str(), "w")) == NULL)
    824   {
    825     PRINTF(1)("could not open %s fro writing\n", fileName.c_str());
    826     return false;
    827   }
    828   fclose(stream);
    829 }
    830 
    831 /**
    832  * @brief deletes a File from disk
    833  * @param fileName the File to delete
    834 */
    835 bool ResourceManager::deleteFile(const std::string& fileName)
    836 {
    837   std::string tmpName = ResourceManager::homeDirCheck(fileName);
    838   unlink(tmpName.c_str());
    839 }
    840 
    841 /**
    842  * @param name the Name of the file to check
    843  * @returns The name of the file, including the HomeDir
    844  */
    845 std::string ResourceManager::homeDirCheck(const std::string& name)
    846 {
    847   if (name.size() >= 2 && name[0] == '~' && name[1] == '/')
    848   {
    849     std::string homeDir;
    850     std::string newName = name.substr(1);
    851 #ifdef __WIN32__
    852     homeDir = getenv("USERPROFILE");
    853 #else
    854     homeDir = getenv("HOME");
    855 #endif
    856     return homeDir + newName;
    857   }
    858   else
    859     return name;
    860 }
    861 
    862 /**
    863  * @param name the relative name of the File/Directory.
    864  * @returns a new std::string with the name in abs-dir-format
    865  */
    866 std::string ResourceManager::getAbsDir(const std::string& name)
    867 {
    868   if (name.empty())
    869     return "";
    870   std::string retName = name;
    871   if (strncmp(name.c_str(), "/", 1))
    872   {
    873     if (name[0] == '.' && name[1] != '.')
    874       retName.erase(0);
    875     const std::string& absDir = File::cwd();
    876     retName = absDir + retName;
    877   }
    878   return retName;
    879 }
    880 
    881 
    882 /**
    883739 * @param fileName the Name of the File to check
    884740 * @returns The full name of the file, including the DataDir, and NULL if the file does not exist
     
    891747
    892748  std::string retName = ResourceManager::getInstance()->getDataDir() +fileName;
    893   if (ResourceManager::isFile(retName) || ResourceManager::isDir(retName))
     749  if (File(retName).isFile() || File(retName).isDirectory())
    894750    return retName;
    895751  else
     
    911767  std::string checkFile = ResourceManager::getInstance()->getDataDir() + fileName;
    912768
    913   if (ResourceManager::isFile(checkFile) || ResourceManager::isDir(checkFile))
     769  if (File(checkFile).exists())
    914770    retVal = true;
    915771  else
Note: See TracChangeset for help on using the changeset viewer.