diff options
Diffstat (limited to 'src/Cache.cpp')
-rw-r--r-- | src/Cache.cpp | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/src/Cache.cpp b/src/Cache.cpp index d402d36..f3c5830 100644 --- a/src/Cache.cpp +++ b/src/Cache.cpp @@ -3,10 +3,13 @@ #include "../include/ResourceCache.hpp" #include "../include/FileUtil.hpp" #include "../include/Gif.hpp" +#include "../include/Chatbar.hpp" #include <boost/filesystem/convenience.hpp> #include <unordered_map> #include <process.hpp> #include <odhtdb/Hash.hpp> +#include <sibs/SafeSerializer.hpp> +#include <sibs/SafeDeserializer.hpp> #if OS_FAMILY == OS_FAMILY_POSIX #include <pwd.h> @@ -60,6 +63,51 @@ namespace dchat return dchatHomeDir; } + void Cache::loadBindsFromFile() + { + StringView fileContent; + try + { + fileContent = getFileContent(getDchatDir() / "binds"); + sibs::SafeDeserializer deserializer((const u8*)fileContent.data, fileContent.size); + + while(!deserializer.empty()) + { + u8 keySize = deserializer.extract<u8>(); + string key; + key.resize(keySize); + deserializer.extract((u8*)&key[0], keySize); + + u8 valueSize = deserializer.extract<u8>(); + string value; + value.resize(valueSize); + deserializer.extract((u8*)&value[0], valueSize); + + Chatbar::addBind(key, value, false); + } + } + catch(FileException &e) + { + fprintf(stderr, "Failed to read binds from file, reason: %s\n", e.what()); + } + + delete fileContent.data; + } + + void Cache::replaceBindsInFile(const unordered_map<string, string> &binds) + { + sibs::SafeSerializer serializer; + for(auto &it : binds) + { + serializer.add((u8)it.first.size()); + serializer.add((const u8*)it.first.data(), it.first.size()); + + serializer.add((u8)it.second.size()); + serializer.add((const u8*)it.second.data(), it.second.size()); + } + fileReplace(getDchatDir() / "binds", StringView((const char*)serializer.getBuffer().data(), serializer.getBuffer().size())); + } + ImageByUrlResult loadImageFromFile(const boost::filesystem::path &filepath) { try |