now handles symlinks

This commit is contained in:
Nicholas O'Connor 2017-03-22 18:12:12 -07:00
parent f69095d7ab
commit 05eeca49c9

View File

@ -25,31 +25,43 @@ vector<string> cellar::bottles::list() {
if (item.substr(0,5) == ".wine") { if (item.substr(0,5) == ".wine") {
sstr_output << item; sstr_output << item;
sstr_output << " "; sstr_output << " ";
string fullitem = homepath + "/" + item;
boost::filesystem::file_status fullitem_status = boost::filesystem::symlink_status(fullitem);
bool symlink = boost::filesystem::is_symlink(fullitem_status);
string jsonpath = homepath + "/" + item + "/cellar.json"; if (symlink) {
if (boost::filesystem::exists(jsonpath)) { sstr_output << "- symlink to ";
try { boost::filesystem::path realpath = boost::filesystem::canonical(fullitem);
json config; sstr_output << realpath.string();
ifstream configstream(jsonpath); result.push_back(sstr_output.str());
stringstream sstr_config; sstr_output.str("");
sstr_config << configstream.rdbuf(); } else {
config = json::parse(sstr_config.str()); string jsonpath = fullitem + "/cellar.json";
if (boost::filesystem::exists(jsonpath)) {
try {
json config;
ifstream configstream(jsonpath);
stringstream sstr_config;
sstr_config << configstream.rdbuf();
config = json::parse(sstr_config.str());
sstr_output << "- " << config["name"]; sstr_output << "- " << config["name"];
result.push_back(sstr_output.str()); result.push_back(sstr_output.str());
sstr_output.str(""); // clear it for the next item sstr_output.str(""); // clear it for the next item
} }
catch (const exception &exc) { catch (const exception &exc) {
sstr_output << "- bogus cellar.json file"; sstr_output << "- bogus cellar.json file";
result.push_back(sstr_output.str()); result.push_back(sstr_output.str());
sstr_output.str(""); sstr_output.str("");
} }
} }
else { else {
sstr_output << "- anonymous wine bottle"; sstr_output << "- anonymous wine bottle";
result.push_back(sstr_output.str()); result.push_back(sstr_output.str());
sstr_output.str(""); sstr_output.str("");
} }
}
} }
} }