@@ -441,7 +441,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b | |||||
<h1>New Session Manager Documentation</h1> | <h1>New Session Manager Documentation</h1> | ||||
<div class="details"> | <div class="details"> | ||||
<span id="author" class="author">Nils Hilbricht</span><br> | <span id="author" class="author">Nils Hilbricht</span><br> | ||||
<span id="revnumber">version 1.5.3</span> | |||||
<span id="revnumber">version 1.6.0</span> | |||||
</div> | </div> | ||||
</div> | </div> | ||||
<div id="content"> | <div id="content"> | ||||
@@ -556,8 +556,8 @@ Documentation and tutorials for software-developers will be added at a later dat | |||||
</div> | </div> | ||||
<div id="footer"> | <div id="footer"> | ||||
<div id="footer-text"> | <div id="footer-text"> | ||||
Version 1.5.3<br> | |||||
Last updated 2022-01-15 13:33:32 +0100 | |||||
Version 1.6.0<br> | |||||
Last updated 2022-03-05 12:20:42 +0100 | |||||
</div> | </div> | ||||
</div> | </div> | ||||
</body> | </body> |
@@ -1,6 +1,9 @@ | |||||
//// | //// | ||||
This is "asciidoctor", not plain "asciidoc". | This is "asciidoctor", not plain "asciidoc". | ||||
https://asciidoctor.org/docs/user-manual/ | https://asciidoctor.org/docs/user-manual/ | ||||
100 characters per line (soft limit). | |||||
//// | //// | ||||
@@ -12,8 +15,12 @@ A copy of the license has been provided in the file documentation/API/LICENSE. | |||||
//// | //// | ||||
//// | |||||
The revnumber API 1.1.1 below is autogenerated. Please do not touch this line. | |||||
//// | |||||
:authors: Jonathan Moore Liles, Nils Hilbricht | :authors: Jonathan Moore Liles, Nils Hilbricht | ||||
:revnumber: API 1.1.1 | |||||
:revnumber: API 1.1.2 | |||||
:revremark: License CC-By-SA v2.5 | :revremark: License CC-By-SA v2.5 | ||||
:iconfont-remote!: | :iconfont-remote!: | ||||
:!webfonts: | :!webfonts: | ||||
@@ -161,6 +168,23 @@ to. Some unique component may be required to prevent collisions. | |||||
==== Session Root and Session Directories | ==== Session Root and Session Directories | ||||
Client programs MUST NOT handle the following themselves. This section is background-information. | |||||
NSM follows the link:https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html[XDG Base Directory Specifications] | |||||
All existing and new sessions are directories below the session-root, which defaults to | |||||
`$XDG_DATA_HOME/nsm/`, which usually results in `$HOME/.local/share/nsm/`. | |||||
Each session directory contains a file `session.nsm` with one client per line `name:executable:UID\n` | |||||
For example: | |||||
``` | |||||
JACKPatch:jackpatch:nBEIQ | |||||
jack_mixer:jack_mixer:nTXHV | |||||
Carla-Rack:carla-rack:nFAOD | |||||
``` | |||||
`nsmd` loads and saves this file, client names are their self-reported names. | |||||
The file format is final and frozen. Additions or changes SHALL NOT be made. | |||||
===== Subdirectories / Hierarchical Structure | ===== Subdirectories / Hierarchical Structure | ||||
Subdirectories MAY be made to organize sessions into meaningful structures, such as album/track or | Subdirectories MAY be made to organize sessions into meaningful structures, such as album/track or | ||||
@@ -177,6 +201,32 @@ Any session itself MUST be a "leaf" in this directory tree. A session MUST NOT c | |||||
session subdirectories: any directory that contains a file `session.nsm` is the final | session subdirectories: any directory that contains a file `session.nsm` is the final | ||||
element in the hierarchy. | element in the hierarchy. | ||||
===== Lockfiles | |||||
Because multiple `nsmd` can run at the same time we need to prevent accidental write-access to the | |||||
same session by different nsm-daemons, and subsequently GUIs. | |||||
Therefore each currently open session creates a lockfile under `$XDG_RUNTIME_DIR/nsm/` (usually | |||||
`/run/user/XXXX/nsm/`) that tells `nsmd` to not open such a locked session. This directory gets | |||||
cleaned by the operating system, preventing sessions to stay locked after e.g. a power failure. | |||||
The lockfile is named after the simple session name combined with a numeric ID for the session | |||||
root. It is possible that two `nsmd` opened two different session roots, both with the same simple | |||||
session name, e.g. "my song". Lockfiles are able to distinguish between those and will not prevent | |||||
access in this scenario. The numeric ID is a djb2 hash modulo (%) 65521 of the session root directory | |||||
(see `src/file.cpp` function `simple_hash()`). | |||||
The lockfile contains, on separate lines: | |||||
* The absolute path to the session, including the root-dir, which could be overriden by `nsmd --session-root`, allowing two sessions of the same basic name in different roots. | |||||
* the OSC URL of the server that runs this session, the same as `$NSM_URL`. | |||||
Example: | |||||
``` | |||||
/home/johann/.local/share/nsm/cantatas/easter1751 | |||||
osc.udp://myuser.localdomain:11287/ | |||||
== NSM OSC Protocol | == NSM OSC Protocol | ||||
@@ -751,8 +801,8 @@ PATCH version when you make backwards compatible bug fixes. | |||||
|Non Session Manager at moment of fork | 1.2 (June 2020) | |Non Session Manager at moment of fork | 1.2 (June 2020) | ||||
|Non Session Manager API | 1.0 link:https://github.com/original-male/non/blob/master/session-manager/src/nsmd.C[NON nsmd.C] | |Non Session Manager API | 1.0 link:https://github.com/original-male/non/blob/master/session-manager/src/nsmd.C[NON nsmd.C] | ||||
|Original API Document | 1.0 link:http://non.tuxfamily.org/nsm/API.html[non.tuxfamily.org/nsm/API.html] | |Original API Document | 1.0 link:http://non.tuxfamily.org/nsm/API.html[non.tuxfamily.org/nsm/API.html] | ||||
|New Session Manager | 1.5.0 | |||||
|New Session Manager API | 1.1.1 link:https://github.com/jackaudio/new-session-manager/blob/master/src/nsmd.cpp[NEW nsmd.cpp] | |||||
|New Session Manager | 1.6.0 | |||||
|New Session Manager API | 1.1.2 link:https://github.com/jackaudio/new-session-manager/blob/master/src/nsmd.cpp[NEW nsmd.cpp] | |||||
|New API Document | 1.5.0 link:#[Here] | |New API Document | 1.5.0 link:#[Here] | ||||
|=== | |=== | ||||
@@ -851,3 +901,9 @@ patch-level from 1.1.0 to 1.1.1 | |||||
* Add API-section "Subdirectories / Hierarchical Structure" that explains the session directory. | * Add API-section "Subdirectories / Hierarchical Structure" that explains the session directory. | ||||
This behaviour was already the case for nsm-legacy-gui and nsmd 1.5.0 was patched to adhere to this | This behaviour was already the case for nsm-legacy-gui and nsmd 1.5.0 was patched to adhere to this | ||||
behaviour more strictly as well, removing false session entries in 3rd party clients such as Agordejo. | behaviour more strictly as well, removing false session entries in 3rd party clients such as Agordejo. | ||||
=== Changes in API Version 1.1.2 | |||||
* nsmd now follows the XDG Base Directory Specifications for it's session root and lock files. This | |||||
if of no consequence to clients but required documentation nevertheless, which was described as | |||||
"background information" in the new section. |
@@ -14,7 +14,7 @@ A copy of the license has been provided in the file documentation/LICENSE. | |||||
:Author: Nils Hilbricht | :Author: Nils Hilbricht | ||||
:iconfont-remote!: | :iconfont-remote!: | ||||
:!webfonts: | :!webfonts: | ||||
:revnumber: 1.5.3 | |||||
:revnumber: 1.6.0 | |||||
= New Session Manager Documentation | = New Session Manager Documentation | ||||
@@ -1,7 +1,7 @@ | |||||
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.48.5. | |||||
.TH JACKPATCH "1" "January 2022" "jackpatch Version 1.5.3" "User Commands" | |||||
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.1. | |||||
.TH JACKPATCH "1" "March 2022" "jackpatch Version 1.6.0" "User Commands" | |||||
.SH NAME | .SH NAME | ||||
jackpatch \- manual page for jackpatch Version 1.5.3 | |||||
jackpatch \- manual page for jackpatch Version 1.6.0 | |||||
.SH DESCRIPTION | .SH DESCRIPTION | ||||
jackpatch \- Remember the JACK Audio Connection Kit Graph in NSM | jackpatch \- Remember the JACK Audio Connection Kit Graph in NSM | ||||
.PP | .PP | ||||
@@ -1,7 +1,7 @@ | |||||
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.48.5. | |||||
.TH NSM-LEGACY-GUI "1" "January 2022" "nsm-legacy-gui Version 1.5.3" "User Commands" | |||||
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.1. | |||||
.TH NSM-LEGACY-GUI "1" "March 2022" "nsm-legacy-gui Version 1.6.0" "User Commands" | |||||
.SH NAME | .SH NAME | ||||
nsm-legacy-gui \- manual page for nsm-legacy-gui Version 1.5.3 | |||||
nsm-legacy-gui \- manual page for nsm-legacy-gui Version 1.6.0 | |||||
.SH DESCRIPTION | .SH DESCRIPTION | ||||
nsm\-legacy\-gui \- FLTK GUI for the 'New Session Manager' | nsm\-legacy\-gui \- FLTK GUI for the 'New Session Manager' | ||||
.SS "Usage:" | .SS "Usage:" | ||||
@@ -1,7 +1,7 @@ | |||||
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.48.5. | |||||
.TH NSM-LEGACY-GUI "1" "January 2022" "nsm-legacy-gui Version 1.5.3" "User Commands" | |||||
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.1. | |||||
.TH NSM-LEGACY-GUI "1" "March 2022" "nsm-legacy-gui Version 1.6.0" "User Commands" | |||||
.SH NAME | .SH NAME | ||||
nsm-legacy-gui \- manual page for nsm-legacy-gui Version 1.5.3 | |||||
nsm-legacy-gui \- manual page for nsm-legacy-gui Version 1.6.0 | |||||
.SH DESCRIPTION | .SH DESCRIPTION | ||||
nsm\-legacy\-gui \- FLTK GUI for the 'New Session Manager' | nsm\-legacy\-gui \- FLTK GUI for the 'New Session Manager' | ||||
.SS "Usage:" | .SS "Usage:" | ||||
@@ -1,7 +1,7 @@ | |||||
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.48.5. | |||||
.TH NSM-PROXY-GUI "1" "January 2022" "nsm-proxy-gui Version 1.5.3" "User Commands" | |||||
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.1. | |||||
.TH NSM-PROXY-GUI "1" "March 2022" "nsm-proxy-gui Version 1.6.0" "User Commands" | |||||
.SH NAME | .SH NAME | ||||
nsm-proxy-gui \- manual page for nsm-proxy-gui Version 1.5.3 | |||||
nsm-proxy-gui \- manual page for nsm-proxy-gui Version 1.6.0 | |||||
.SH DESCRIPTION | .SH DESCRIPTION | ||||
nsm\-proxy\-gui \- GUI for nsm\-proxy, a wrapper for executables without direct NSM\-Support. | nsm\-proxy\-gui \- GUI for nsm\-proxy, a wrapper for executables without direct NSM\-Support. | ||||
.SS "Usage:" | .SS "Usage:" | ||||
@@ -1,7 +1,7 @@ | |||||
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.48.5. | |||||
.TH NSM-PROXY "1" "January 2022" "nsm-proxy Version 1.5.3" "User Commands" | |||||
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.1. | |||||
.TH NSM-PROXY "1" "March 2022" "nsm-proxy Version 1.6.0" "User Commands" | |||||
.SH NAME | .SH NAME | ||||
nsm-proxy \- manual page for nsm-proxy Version 1.5.3 | |||||
nsm-proxy \- manual page for nsm-proxy Version 1.6.0 | |||||
.SH DESCRIPTION | .SH DESCRIPTION | ||||
nsm\-proxy \- Wrapper for executables without direct NSM\-Support. | nsm\-proxy \- Wrapper for executables without direct NSM\-Support. | ||||
.PP | .PP | ||||
@@ -1,7 +1,7 @@ | |||||
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.48.5. | |||||
.TH NSMD "1" "January 2022" "nsmd Version 1.5.3" "User Commands" | |||||
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.1. | |||||
.TH NSMD "1" "March 2022" "nsmd Version 1.6.0" "User Commands" | |||||
.SH NAME | .SH NAME | ||||
nsmd \- manual page for nsmd Version 1.5.3 | |||||
nsmd \- manual page for nsmd Version 1.6.0 | |||||
.SH DESCRIPTION | .SH DESCRIPTION | ||||
nsmd \- Daemon and server for the 'New Session Manager' | nsmd \- Daemon and server for the 'New Session Manager' | ||||
.SS "Usage:" | .SS "Usage:" | ||||
@@ -21,7 +21,7 @@ Show version | |||||
OSC port number [Default: provided by system]. | OSC port number [Default: provided by system]. | ||||
.TP | .TP | ||||
\fB\-\-session\-root\fR path | \fB\-\-session\-root\fR path | ||||
Base path for sessions [Default: \fI\,~/NSM\/\fP Sessions]. | |||||
Base path for sessions [Default: $XDG_DATA_HOME/nsm/]. | |||||
.TP | .TP | ||||
\fB\-\-load\-session\fR name | \fB\-\-load\-session\fR name | ||||
Load existing session [Example: "My Song"]. | Load existing session [Example: "My Song"]. | ||||