#include "thread_idx.hxx"
#include <boost/archive/xml_iarchive.hpp>
+#include <boost/archive/xml_oarchive.hpp>
#include <boost/serialization/nvp.hpp>
-#include <boost/exception.hpp>
#include <boost/format.hpp>
#include <boost/filesystem.hpp>
#include <fstream>
#include <string>
#include <iostream>
+#include "misc.hxx"
namespace dialektos {
+ThreadIdx::ThreadIdx() : title_(), line_count_(0), last_modified_(), etag_()
+{}
-ThreadIdx ThreadIdx::from_xml(const boost::filesystem::path& xml) {
+void ThreadIdx::to_xml(const boost::filesystem::path& _xml) {
+ const std::string prefix = _xml.filename().substr(0, 3);
+ const boost::filesystem::path xml =
+ _xml.parent_path() / prefix / _xml.filename();
+
+ if (!misc::create_directories(xml.parent_path())) return;
+ std::ofstream ofs(xml.file_string().c_str());
+ try {
+ boost::archive::xml_oarchive oa(ofs);
+ oa << boost::serialization::make_nvp("ThreadIdx", *this);
+ } catch (const boost::archive::archive_exception& e) {
+ std::cerr << e.what() << " " << xml.file_string() << std::endl;
+ }
+ ofs.close();
+}
+
+ThreadIdx ThreadIdx::from_xml(const boost::filesystem::path& _xml) {
ThreadIdx idx;
+ const std::string prefix = _xml.filename().substr(0, 3);
+ const boost::filesystem::path xml =
+ _xml.parent_path() / prefix / _xml.filename();
+
+ if (!boost::filesystem::exists(xml) ||
+ !boost::filesystem::is_regular_file(xml))
+ return idx;
+
std::ifstream ifs(xml.file_string().c_str());
try {
boost::archive::xml_iarchive ia(ifs);
ia >> boost::serialization::make_nvp("ThreadIdx", idx);
- } catch (const boost::exception& e) {
- // TODO thread safety.
- std::cerr << boost::format("cannot read %1%") % xml.file_string() << std::endl;
+ } catch (const boost::archive::archive_exception& e) {
+ std::cerr << e.what() << " " << xml.file_string() << std::endl;
return ThreadIdx();
}
ifs.close();