Save chats and tabs in new settings system

This commit is contained in:
Rasmus Karlsson
2017-12-22 14:44:31 +01:00
parent 42749538a7
commit d8c01ce374
14 changed files with 187 additions and 293 deletions
+4 -57
View File
@@ -7,7 +7,6 @@
#include <QDebug>
#include <QStandardPaths>
#include <boost/foreach.hpp>
#include <boost/property_tree/json_parser.hpp>
namespace chatterino {
WindowManager *WindowManager::instance = nullptr;
@@ -70,8 +69,6 @@ widgets::Window &WindowManager::createWindow()
{
auto *window = new widgets::Window("external", this->channelManager, this->colorScheme, false);
window->loadDefaults();
this->windows.push_back(window);
return *window;
@@ -92,65 +89,15 @@ widgets::Window *WindowManager::windowAt(int index)
return this->windows.at(index);
}
void WindowManager::load()
{
const auto &settingsPath = getSettingsPath();
boost::property_tree::ptree tree;
try {
boost::property_tree::read_json(settingsPath, tree);
} catch (const boost::property_tree::json_parser_error &ex) {
qDebug() << "Error using property_tree::readJson: " << QString::fromStdString(ex.message());
getMainWindow().loadDefaults();
return;
}
// Read a list of windows
try {
BOOST_FOREACH (const boost::property_tree::ptree::value_type &v,
tree.get_child("windows.")) {
qDebug() << QString::fromStdString(v.first.data());
const auto &type = v.second.get<std::string>("type", "unknown");
if (type == "main") {
getMainWindow().load(v.second);
} else {
qDebug() << "Unhandled window type: " << type.c_str();
}
}
} catch (boost::property_tree::ptree_error &) {
// can't read windows
}
// if the main window was not loaded properly, load defaults
if (!getMainWindow().isLoaded()) {
getMainWindow().loadDefaults();
}
// If there are no windows, create a default main window
}
void WindowManager::save()
{
auto &settingsPath = getSettingsPath();
boost::property_tree::ptree tree;
assert(this->mainWindow);
// Create windows array
boost::property_tree::ptree windows;
this->mainWindow->save();
{
// save main window
auto child = getMainWindow().save();
windows.push_back(std::make_pair("", child));
for (widgets::Window *window : this->windows) {
window->save();
}
// TODO: iterate through rest of windows and add them to the "windows" ptree
tree.add_child("windows", windows);
boost::property_tree::write_json(settingsPath, tree);
}
} // namespace chatterino