aboutsummaryrefslogtreecommitdiff
path: root/src/Cache.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/Cache.cpp')
-rw-r--r--src/Cache.cpp48
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