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") {
sstr_output << item;
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 (boost::filesystem::exists(jsonpath)) {
try {
json config;
ifstream configstream(jsonpath);
stringstream sstr_config;
sstr_config << configstream.rdbuf();
config = json::parse(sstr_config.str());
if (symlink) {
sstr_output << "- symlink to ";
boost::filesystem::path realpath = boost::filesystem::canonical(fullitem);
sstr_output << realpath.string();
result.push_back(sstr_output.str());
sstr_output.str("");
} else {
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"];
result.push_back(sstr_output.str());
sstr_output.str(""); // clear it for the next item
}
catch (const exception &exc) {
sstr_output << "- bogus cellar.json file";
result.push_back(sstr_output.str());
sstr_output.str("");
}
}
else {
sstr_output << "- anonymous wine bottle";
result.push_back(sstr_output.str());
sstr_output.str("");
}
sstr_output << "- " << config["name"];
result.push_back(sstr_output.str());
sstr_output.str(""); // clear it for the next item
}
catch (const exception &exc) {
sstr_output << "- bogus cellar.json file";
result.push_back(sstr_output.str());
sstr_output.str("");
}
}
else {
sstr_output << "- anonymous wine bottle";
result.push_back(sstr_output.str());
sstr_output.str("");
}
}
}
}