mirror of
https://github.com/luanti-org/luanti.git
synced 2025-06-27 16:36:03 +00:00
Almost support loading sounds from server
This commit is contained in:
parent
524c78a8d6
commit
1cac1de3b2
9 changed files with 183 additions and 186 deletions
|
@ -24,6 +24,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
#include "filesys.h"
|
||||
#include "utility.h"
|
||||
#include "hex.h"
|
||||
#include "sha1.h"
|
||||
|
||||
#include <string>
|
||||
#include <iostream>
|
||||
|
@ -34,7 +35,7 @@ bool FileCache::loadByPath(const std::string &path, std::ostream &os)
|
|||
|
||||
if(!fis.good()){
|
||||
verbosestream<<"FileCache: File not found in cache: "
|
||||
<<path<<std::endl;
|
||||
<<path<<std::endl;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -53,7 +54,7 @@ bool FileCache::loadByPath(const std::string &path, std::ostream &os)
|
|||
}
|
||||
if(bad){
|
||||
errorstream<<"FileCache: Failed to read file from cache: \""
|
||||
<<path<<"\""<<std::endl;
|
||||
<<path<<"\""<<std::endl;
|
||||
}
|
||||
|
||||
return !bad;
|
||||
|
@ -67,7 +68,7 @@ bool FileCache::updateByPath(const std::string &path, const std::string &data)
|
|||
if(!file.good())
|
||||
{
|
||||
errorstream<<"FileCache: Can't write to file at "
|
||||
<<path<<std::endl;
|
||||
<<path<<std::endl;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -77,34 +78,41 @@ bool FileCache::updateByPath(const std::string &path, const std::string &data)
|
|||
return !file.fail();
|
||||
}
|
||||
|
||||
bool FileCache::loadByName(const std::string &name, std::ostream &os)
|
||||
{
|
||||
std::string path = m_dir + DIR_DELIM + name;
|
||||
return loadByPath(path, os);
|
||||
}
|
||||
|
||||
|
||||
bool FileCache::updateByName(const std::string &name, const std::string &data)
|
||||
bool FileCache::update(const std::string &name, const std::string &data)
|
||||
{
|
||||
std::string path = m_dir + DIR_DELIM + name;
|
||||
return updateByPath(path, data);
|
||||
}
|
||||
|
||||
std::string FileCache::getPathFromChecksum(const std::string &checksum)
|
||||
bool FileCache::update_sha1(const std::string &data)
|
||||
{
|
||||
std::string checksum_hex = hex_encode(checksum.c_str(), checksum.length());
|
||||
return m_dir + DIR_DELIM + checksum_hex;
|
||||
SHA1 sha1;
|
||||
sha1.addBytes(data.c_str(), data.size());
|
||||
unsigned char *digest = sha1.getDigest();
|
||||
std::string sha1_raw((char*)digest, 20);
|
||||
free(digest);
|
||||
std::string sha1_hex = hex_encode(sha1_raw);
|
||||
return update(sha1_hex, data);
|
||||
}
|
||||
|
||||
bool FileCache::loadByChecksum(const std::string &checksum, std::ostream &os)
|
||||
bool FileCache::load(const std::string &name, std::ostream &os)
|
||||
{
|
||||
std::string path = getPathFromChecksum(checksum);
|
||||
std::string path = m_dir + DIR_DELIM + name;
|
||||
return loadByPath(path, os);
|
||||
}
|
||||
|
||||
bool FileCache::updateByChecksum(const std::string &checksum,
|
||||
const std::string &data)
|
||||
bool FileCache::load_sha1(const std::string &sha1_raw, std::ostream &os)
|
||||
{
|
||||
std::string path = getPathFromChecksum(checksum);
|
||||
return updateByPath(path, data);
|
||||
std::ostringstream tmp_os(std::ios_base::binary);
|
||||
if(!load(hex_encode(sha1_raw), tmp_os))
|
||||
return false;
|
||||
SHA1 sha1;
|
||||
sha1.addBytes(tmp_os.str().c_str(), tmp_os.str().length());
|
||||
unsigned char *digest = sha1.getDigest();
|
||||
std::string sha1_real_raw((char*)digest, 20);
|
||||
free(digest);
|
||||
if(sha1_real_raw != sha1_raw){
|
||||
verbosestream<<"FileCache["<<m_dir<<"]: filename "<<sha1_real_raw
|
||||
<<" mismatches actual checksum"<<std::endl;
|
||||
return false;
|
||||
}
|
||||
os<<tmp_os.str();
|
||||
return true;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue