Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 53 additions & 0 deletions docs/JSON-RPC.md
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,40 @@ Results:
| result.clients | array | The client list. See jamulusclient/clientListReceived for the format. |


### jamulusclient/getCurrentDirectory

Returns the currently selected directory socket address.

Parameters:

| Name | Type | Description |
| --- | --- | --- |
| params | object | No parameters (empty object). |

Results:

| Name | Type | Description |
| --- | --- | --- |
| result | string | The socket address of the current directory, usable as params.directory in jamulusclient/pollServerList. |


### jamulusclient/getDirectories

Returns the list of directories in the same order as presented in Jamulus.

Parameters:

| Name | Type | Description |
| --- | --- | --- |
| params | object | No parameters (empty object). |

Results:

| Name | Type | Description |
| --- | --- | --- |
| result | array | Array of directory socket address strings, usable as params.directory in jamulusclient/pollServerList. |


### jamulusclient/getMidiDevices

Returns a list of available MIDI input devices.
Expand Down Expand Up @@ -222,6 +256,25 @@ Results:
| result | object | MIDI settings object. |


### jamulusclient/getSocketAndFriendlyDirectories

Returns the list of directories in the same order as presented in Jamulus, pairing each directory's socket address with the friendly name Jamulus displays for it.

Parameters:

| Name | Type | Description |
| --- | --- | --- |
| params | object | No parameters (empty object). |

Results:

| Name | Type | Description |
| --- | --- | --- |
| result | array | Array of directory objects, in the same order as jamulusclient/getDirectories. |
| result[*].socket | string | Socket address, usable as params.directory in jamulusclient/pollServerList. |
| result[*].friendly | string | The display name Jamulus shows for this directory. |


### jamulusclient/pollServerList

Request list of servers in a directory.
Expand Down
66 changes: 66 additions & 0 deletions src/clientrpc.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -205,6 +205,72 @@ CClientRpc::CClientRpc ( CClient* pClient, CClientSettings* pSettings, CRpcServe
response["result"] = "ok";
} );

/// @rpc_method jamulusclient/getDirectories
/// @brief Returns the list of directories in the same order as presented in Jamulus.
/// @param {object} params - No parameters (empty object).
/// @result {array} result - Array of directory socket address strings, usable as params.directory in jamulusclient/pollServerList.
pRpcServer->HandleMethod ( "jamulusclient/getDirectories", [=] ( const QJsonObject& params, QJsonObject& response ) {
QJsonArray arrDirectories;
// built-in directories in UI order
for ( int i = AT_DEFAULT; i < AT_CUSTOM; i++ )
{
arrDirectories.append ( NetworkUtil::GetDirectoryAddress ( static_cast<EDirectoryType> ( i ), "" ) );
}
// custom directories — stored newest-first, displayed oldest-first (reverse iteration)
for ( int i = MAX_NUM_SERVER_ADDR_ITEMS - 1; i >= 0; i-- )
{
if ( !m_pSettings->vstrDirectoryAddress[i].isEmpty() )
{
arrDirectories.append ( m_pSettings->vstrDirectoryAddress[i] );
}
}
response["result"] = arrDirectories;
Q_UNUSED ( params );
} );

/// @rpc_method jamulusclient/getSocketAndFriendlyDirectories
/// @brief Returns the list of directories in the same order as presented in Jamulus, pairing each directory's
/// socket address with the friendly name Jamulus displays for it.
/// @param {object} params - No parameters (empty object).
/// @result {array} result - Array of directory objects, in the same order as jamulusclient/getDirectories.
/// @result {string} result[*].socket - Socket address, usable as params.directory in jamulusclient/pollServerList.
/// @result {string} result[*].friendly - The display name Jamulus shows for this directory.
pRpcServer->HandleMethod ( "jamulusclient/getSocketAndFriendlyDirectories", [=] ( const QJsonObject& params, QJsonObject& response ) {
QJsonArray arrDirectories;
// built-in directories in UI order
for ( int i = AT_DEFAULT; i < AT_CUSTOM; i++ )
{
const EDirectoryType eDirectoryType = static_cast<EDirectoryType> ( i );
arrDirectories.append ( QJsonObject{
{ "socket", NetworkUtil::GetDirectoryAddress ( eDirectoryType, "" ) },
{ "friendly", DirectoryTypeToString ( eDirectoryType ) },
} );
}
// custom directories — stored newest-first, displayed oldest-first (reverse iteration)
for ( int i = MAX_NUM_SERVER_ADDR_ITEMS - 1; i >= 0; i-- )
{
if ( !m_pSettings->vstrDirectoryAddress[i].isEmpty() )
{
arrDirectories.append ( QJsonObject{
{ "socket", m_pSettings->vstrDirectoryAddress[i] },
{ "friendly", m_pSettings->vstrDirectoryAddress[i] },
} );
}
}
response["result"] = arrDirectories;
Q_UNUSED ( params );
} );

/// @rpc_method jamulusclient/getCurrentDirectory
/// @brief Returns the currently selected directory socket address.
/// @param {object} params - No parameters (empty object).
/// @result {string} result - The socket address of the current directory, usable as params.directory in jamulusclient/pollServerList.
pRpcServer->HandleMethod ( "jamulusclient/getCurrentDirectory", [=] ( const QJsonObject& params, QJsonObject& response ) {
response["result"] =
NetworkUtil::GetDirectoryAddress ( m_pSettings->eDirectoryType, m_pSettings->vstrDirectoryAddress[m_pSettings->iCustomDirectoryIndex] );
Q_UNUSED ( params );
} );

/// @rpc_method jamulus/getMode
/// @brief Returns the current mode, i.e. whether Jamulus is running as a server or client.
/// @param {object} params - No parameters (empty object).
Expand Down
Loading