bottles now initialize their config in a new constructor instead of get_bottles
This commit is contained in:
parent
20844ae72b
commit
22cffca2d8
@ -22,13 +22,21 @@ namespace cellar {
|
|||||||
};
|
};
|
||||||
class Bottle {
|
class Bottle {
|
||||||
public:
|
public:
|
||||||
|
// public members
|
||||||
bottle_type type;
|
bottle_type type;
|
||||||
json config;
|
json config;
|
||||||
string path;
|
string path;
|
||||||
string canonical_path;
|
string canonical_path;
|
||||||
|
|
||||||
|
// constructors
|
||||||
Bottle();
|
Bottle();
|
||||||
|
Bottle(string);
|
||||||
|
|
||||||
|
// methods
|
||||||
bool load_config();
|
bool load_config();
|
||||||
bool save_config();
|
bool save_config();
|
||||||
|
string get_config(string);
|
||||||
|
bool set_config(string, string);
|
||||||
};
|
};
|
||||||
extern map<string, Bottle> get_bottles();
|
extern map<string, Bottle> get_bottles();
|
||||||
}
|
}
|
||||||
|
@ -29,6 +29,32 @@ Bottle::Bottle() {
|
|||||||
type = bottle_anonymous;
|
type = bottle_anonymous;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Bottle::Bottle(string patharg) {
|
||||||
|
config = json({});
|
||||||
|
path = patharg;
|
||||||
|
|
||||||
|
boost::filesystem::file_status path_status = boost::filesystem::symlink_status(path);
|
||||||
|
bool symlink = boost::filesystem::is_symlink(path_status);
|
||||||
|
|
||||||
|
if (symlink) {
|
||||||
|
boost::filesystem::path realpath = boost::filesystem::canonical(path);
|
||||||
|
canonical_path = realpath.string();
|
||||||
|
type = bottle_symlink;
|
||||||
|
} else {
|
||||||
|
canonical_path = path;
|
||||||
|
try {
|
||||||
|
if (load_config()) {
|
||||||
|
type = bottle_labelled;
|
||||||
|
} else {
|
||||||
|
type = bottle_anonymous;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (const exception &exc) {
|
||||||
|
type = bottle_error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
DLL_PUBLIC map<string, Bottle> cellar::bottles::get_bottles() {
|
DLL_PUBLIC map<string, Bottle> cellar::bottles::get_bottles() {
|
||||||
map<string, Bottle> result;
|
map<string, Bottle> result;
|
||||||
|
|
||||||
@ -36,31 +62,9 @@ DLL_PUBLIC map<string, Bottle> cellar::bottles::get_bottles() {
|
|||||||
vector<string> homedir = fs::listdir(homepath);
|
vector<string> homedir = fs::listdir(homepath);
|
||||||
for (string item : homedir) {
|
for (string item : homedir) {
|
||||||
if (item.substr(0,5) == ".wine") {
|
if (item.substr(0,5) == ".wine") {
|
||||||
Bottle output;
|
|
||||||
|
|
||||||
string fullitem = homepath + "/" + item;
|
string fullitem = homepath + "/" + item;
|
||||||
output.path = fullitem;
|
Bottle output(fullitem);
|
||||||
|
|
||||||
boost::filesystem::file_status fullitem_status = boost::filesystem::symlink_status(fullitem);
|
|
||||||
bool symlink = boost::filesystem::is_symlink(fullitem_status);
|
|
||||||
|
|
||||||
if (symlink) {
|
|
||||||
boost::filesystem::path realpath = boost::filesystem::canonical(fullitem);
|
|
||||||
output.canonical_path = realpath.string();
|
|
||||||
output.type = bottle_symlink;
|
|
||||||
} else {
|
|
||||||
output.canonical_path = fullitem;
|
|
||||||
try {
|
|
||||||
if (output.load_config()) {
|
|
||||||
output.type = bottle_labelled;
|
|
||||||
} else {
|
|
||||||
output.type = bottle_anonymous;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (const exception &exc) {
|
|
||||||
output.type = bottle_error;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
result[item] = output;
|
result[item] = output;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user