From 9bb631f1e1861c63f38125fffb91081c98a1cfcc Mon Sep 17 00:00:00 2001 From: dec05eba Date: Thu, 3 May 2018 08:29:45 +0200 Subject: Add/remove/list binds, saving to file --- src/Cache.cpp | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) (limited to 'src/Cache.cpp') 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 #include #include #include +#include +#include #if OS_FAMILY == OS_FAMILY_POSIX #include @@ -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(); + string key; + key.resize(keySize); + deserializer.extract((u8*)&key[0], keySize); + + u8 valueSize = deserializer.extract(); + 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 &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 -- cgit v1.2.3