`JACK_METADATA_SIGNAL_TYPE` and `JACK_METADATA_EVENT_TYPES` get deprecated in favour of `JACK_METADATA_PORT_CONTENT`.
- It makes no sense to have two different properties, since they can be distinguished based on the port's type. It requires one step more to get the content type of an unknown port.
- Having a port support multiple protocols is not a good idea. It results in input and output ports having a different meaning ("be liberal in what you accept and conservative in what you send"). It makes checking for compatibility between two port way harder for little benefit.
* Set MIDI port pretty names on macOS
* Set MIDI port pretty names on Windows
* Set MIDI port pretty names on Linux/alsarawmidi
* Update alsarawmidi port naming to match CoreMIDI and WinMME
* Rename PortSetPrettyNameProperty to PortSetDeviceName
* Set hardware property to MIDI port names
Problem:
#set two properties for UUID 4294967296
$ jack_property -s 4294967296 "a" 1
$ jack_property -s 4294967296 b "2"
#-l lists them
$ jack_property -l
4294967296
key: b value: 2
key: a value: 1
#-l for UUID doesn't list them <<<<<<
$ jack_property -l 4294967296
$ jack_property -l 4294967296 a
Value not found for a of 4294967296
$ jack_property -l 4294967296 b
Value not found for b of 4294967296
#it seems that 3 chars is the minimum length for value when querying for UUID
$ jack_property -s 4294967296 a 123
$ jack_property -l 4294967296
key: a value: 123
$ jack_property -l 4294967296 a
123
In example-clients/property.c:
/* list all properties for a given UUID */
if ((cnt = jack_get_properties (uuid, &description)) < 0) {
fprintf (stderr, "could not retrieve properties for %s\n", subject);
exit (1);
}
cnt is always 0 for values < 3 chars. Why?
In common/JackMetadata.cpp:
int JackMetadata::GetProperty(jack_uuid_t subject, const char* key, char** value, char** type)
int JackMetadata::GetProperties(jack_uuid_t subject, jack_description_t* desc)
This loop gets results:
while ((ret = cursor->get (cursor, &key, &data, DB_NEXT)) == 0) {
but are dropped because of this check:
/* result must have at least 2 chars plus 2 nulls to be valid
if (data.size < 4) {
This rule isn't understood. Explanations are welcome!
Reducing the check to 2 (1 char + null) will consider single char values.
This makes listing properties for a given UUID the same keys as when listing all UUIDs and keys.
No side-effects of lowering the value has been detected (yet).
Note: there is no problem getting "short" values in this method:
int JackMetadata::GetAllProperties(jack_description_t** descriptions)
(as used by jack_property -l without UUID)
jack_property output after change to (data.size < 2):
$ jack_property -s 4294967296 "a" 1
$ jack_property -s 4294967296 b "2"
$ jack_property -l
4294967296
key: b value: 2
key: a value: 1
$ jack_property -l 4294967296
key: b value: 2
key: a value: 1
$ jack_property -l 4294967296 a
1
$ jack_property -l 4294967296 b
2
Note: This change should be considered also for JACK1 (libjack/metadata.c)
to keep implementations in sync.
* [metadata] Metadata properties implementation.
* [metadata] Fixed for shared server metadata-base accessor; alsofixed coding/naming style.
* [metadata] Fixed a tab for space.
* [metadata] Use of Berkeley DB is now truly optional on configure time.
* [metadata] Fixed tabs for spaces, again.
* [metadata] Fixed for shared metadata-base initialization and external clients.
* [metadata] Blind-fix for windows codebase.
* [metadata] Metadata API moved into client-side library only.
* [metadata] Fixed jack_port_uuid() stubbiness, now returning a proper UUID from port index.
* [metadata] Uniform method names.
* [metadata] Fixed PropertyChangeNotify through server async call.