#include "SaverImpl.h" #include #include #include #include "QList" #include "QString" #include "mainwindow.h" SaverImpl::SaverImpl(MainWindow *mainWindowPtr_, QList * configItems_, std::map* tunnelConfigs_) : configItems(configItems_), tunnelConfigs(tunnelConfigs_), confpath(), tunconfpath(), mainWindowPtr(mainWindowPtr_) {} SaverImpl::~SaverImpl() {} bool SaverImpl::save(bool reloadAfterSave, const FocusEnum focusOn, const std::string& tunnelNameToFocus, QWidget* widgetToFocus) { //save main config { std::stringstream out; for(QList::iterator it = configItems->begin(); it!= configItems->end(); ++it) { MainWindowItem* item = *it; item->saveToStringStream(out); } using namespace std; QString backup=confpath+"~"; if(QFile::exists(backup)) QFile::remove(backup);//TODO handle errors if(QFile::exists(confpath)) QFile::rename(confpath, backup);//TODO handle errors ofstream outfile; outfile.open(confpath.toStdString());//TODO handle errors outfile << out.str().c_str(); outfile.close(); } //save tunnels config { std::stringstream out; for (std::map::iterator it=tunnelConfigs->begin(); it!=tunnelConfigs->end(); ++it) { //const std::string& name = it->first; TunnelConfig* tunconf = it->second; tunconf->saveHeaderToStringStream(out); tunconf->saveToStringStream(out); tunconf->saveI2CPParametersToStringStream(out); } using namespace std; QString backup=tunconfpath+"~"; if(QFile::exists(backup)) QFile::remove(backup);//TODO handle errors if(QFile::exists(tunconfpath)) QFile::rename(tunconfpath, backup);//TODO handle errors ofstream outfile; outfile.open(tunconfpath.toStdString());//TODO handle errors outfile << out.str().c_str(); outfile.close(); } if(reloadAfterSave) { //reload saved configs #if 0 i2p::client::context.ReloadConfig(); #endif if(reloadAfterSave) emit reloadTunnelsConfigAndUISignal(focusOn==FocusEnum::focusOnTunnelName?QString::fromStdString(tunnelNameToFocus):""); } return true; } void SaverImpl::setConfPath(QString& confpath_) { confpath = confpath_; } void SaverImpl::setTunnelsConfPath(QString& tunconfpath_) { tunconfpath = tunconfpath_; } /*void SaverImpl::setTunnelFocus(bool focusOnTunnel, std::string tunnelNameToFocus) { this->focusOnTunnel=focusOnTunnel; this->tunnelNameToFocus=tunnelNameToFocus; }*/