Merge pull request #3969 from LawnGnome/cffi-config-value-json
cffi: always return config values as JSON
This commit is contained in:
@ -17,7 +17,7 @@ void onclicked(GtkButton* button) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// You must
|
// You must
|
||||||
const size_t wbcffi_version = 1;
|
const size_t wbcffi_version = 2;
|
||||||
|
|
||||||
void* wbcffi_init(const wbcffi_init_info* init_info, const wbcffi_config_entry* config_entries,
|
void* wbcffi_init(const wbcffi_init_info* init_info, const wbcffi_config_entry* config_entries,
|
||||||
size_t config_entries_len) {
|
size_t config_entries_len) {
|
||||||
@ -67,4 +67,4 @@ void wbcffi_refresh(void* instance, int signal) {
|
|||||||
|
|
||||||
void wbcffi_doaction(void* instance, const char* name) {
|
void wbcffi_doaction(void* instance, const char* name) {
|
||||||
printf("cffi_example inst=%p: doAction(%s)\n", instance, name);
|
printf("cffi_example inst=%p: doAction(%s)\n", instance, name);
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/// Waybar ABI version. 1 is the latest version
|
/// Waybar ABI version. 2 is the latest version
|
||||||
extern const size_t wbcffi_version;
|
extern const size_t wbcffi_version;
|
||||||
|
|
||||||
/// Private Waybar CFFI module
|
/// Private Waybar CFFI module
|
||||||
@ -35,7 +35,13 @@ typedef struct {
|
|||||||
typedef struct {
|
typedef struct {
|
||||||
/// Entry key
|
/// Entry key
|
||||||
const char* key;
|
const char* key;
|
||||||
/// Entry value as string. JSON object and arrays are serialized.
|
/// Entry value
|
||||||
|
///
|
||||||
|
/// In ABI version 1, this may be either a bare string if the value is a
|
||||||
|
/// string, or the JSON representation of any other JSON object as a string.
|
||||||
|
///
|
||||||
|
/// From ABI version 2 onwards, this is always the JSON representation of the
|
||||||
|
/// value as a string.
|
||||||
const char* value;
|
const char* value;
|
||||||
} wbcffi_config_entry;
|
} wbcffi_config_entry;
|
||||||
|
|
||||||
|
@ -28,7 +28,7 @@ CFFI::CFFI(const std::string& name, const std::string& id, const Json::Value& co
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Fetch functions
|
// Fetch functions
|
||||||
if (*wbcffi_version == 1) {
|
if (*wbcffi_version == 1 || *wbcffi_version == 2) {
|
||||||
// Mandatory functions
|
// Mandatory functions
|
||||||
hooks_.init = reinterpret_cast<InitFn*>(dlsym(handle, "wbcffi_init"));
|
hooks_.init = reinterpret_cast<InitFn*>(dlsym(handle, "wbcffi_init"));
|
||||||
if (!hooks_.init) {
|
if (!hooks_.init) {
|
||||||
@ -58,10 +58,14 @@ CFFI::CFFI(const std::string& name, const std::string& id, const Json::Value& co
|
|||||||
const auto& keys = config.getMemberNames();
|
const auto& keys = config.getMemberNames();
|
||||||
for (size_t i = 0; i < keys.size(); i++) {
|
for (size_t i = 0; i < keys.size(); i++) {
|
||||||
const auto& value = config[keys[i]];
|
const auto& value = config[keys[i]];
|
||||||
if (value.isConvertibleTo(Json::ValueType::stringValue)) {
|
if (*wbcffi_version == 1) {
|
||||||
config_entries_stringstor.push_back(config[keys[i]].asString());
|
if (value.isConvertibleTo(Json::ValueType::stringValue)) {
|
||||||
|
config_entries_stringstor.push_back(value.asString());
|
||||||
|
} else {
|
||||||
|
config_entries_stringstor.push_back(value.toStyledString());
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
config_entries_stringstor.push_back(config[keys[i]].toStyledString());
|
config_entries_stringstor.push_back(value.toStyledString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user