* Added an 'RDWaveData::validateMarkers()' method.
* Added an 'RDWaveData::validateDateTime()' method.
* Removed the 'RDWaveData::checkDateTimes()' method.
* Added 'RnRmlOwner=' and 'RnRmlGroup=' directives to rd.conf(5).
* Refactored the implementation of the 'Run Shell Command' ['RN']
RML to use runuser(1).
* Fixed a regression in rdairplay(1) that caused macro carts with
the 'Use Event Length for Now & Next Updates' attribute set to
fail to use the parent rdlogmanager(1) event/clock duration.
* Renamed the 'Use Event Length for Now & Next Updates' checkbox
in the 'Edit Cart' dialog in rdlibrary(1) to 'Use RDLogManager
Length for PAD Updates'.
* Updated the screenshot of the 'Edit Cart' dialog in the
Operations Guide.
* Refactored routines for parsing/writing standard date/time strings
(RFC822 and XML xs:dateTime formats) into 'lib/rddatetime.[cpp|h].
* Removed the 'RDWebDateTime()', 'RDGetWebDateTime()',
'RDGetWebDate()', 'RDGetWebTime()', 'RDGetWebMonth()',
'RDXmlDate()', 'RDXmlTime()', 'RDXmlDateTime()' and
'RDXmlTimeZoneSuffix()' functions from 'lib/rdweb.[cpp|h].
* Added a 'dateparse_test' test harness.
* Fixed a bug in rdairplay(1) and rdvairplayd(1) that caused
spurious service information to by generated by the PAD subsystem
when updating events in a null log.
* Fixed a bug in rdairplay(1) and rdvairplayd(1) that threw a
segfault when playing an event in a null log.
* Changed the value of RD_DEFAULT_PYPAD_OWNER to 'pypad'.
* Changed the value of RD_DEFAULT_PYPAD_GROUP to 'pypad'.
* Fixed a bug that caused creation of the 'pypad' system user
to fail.
* Changed the PyPAD namespace from 'PyPAD' to 'pypad'.
* Changed the installation location of PyPAD scripts from
'@libdir@/rivendell/PyPAD/' to '@libdir@/rivendell/pypad/'.
* Removed 'apis/rlm/'.
* Removed the 'Edit Now & Next' button from the 'Configure RDAirPlay'
dialog in rdadmin(1).
* Removed RLM support from rdairplay(1) and rdvairplayd(8).
* Removed v1.x legacy PAD update support from rdairplay(1).
* Dropped the 'NOWNEXT_PLUGINS' table from the database.
* Dropped the 'LOG_MACHINES.UDP_ADDR' field from the database.
* Dropped the 'LOG_MACHINES.UDP_PORT' field from the database.
* Dropped the 'LOG_MACHINES.UDP_STRING' field from the database.
* Dropped the 'LOG_MACHINES.LOG_RML' field from the database.
* Incremented the database version to 305.
* Added a 'lineNumber' parameter to the 'padUpdate' structure.
* Added a 'FIELD_LINE_NUMBER' data value to PyPAD.
* Defined the '%z' metadata wildcard to refer to log line number.
* Added a 'lineId' parameter to the 'padUpdate' structure.
* Added 'FIELD_LINE_ID' data value to PyPAD.
* Defined the '%x' metadata wildcard to refer to log line ID.
* Renamed the RD_RLM2_CLIENT_TCP_PORT define to RD_PAD_CLIENT_TCP_PORT.
* Renamed the RD_RLM_SOURCE_UNIX_ADDRESS define to
RD_PAD_SOURCE_UNIX_ADDRESS.
* Added a RD_PYPAD_SCRIPT_DIR define.
* Added an 'RDNotification::PypadType' value to the
'RDNotification::Type' enumeration.
* Added 'PypadOwner=' and 'PypadGroup=' directives to the
'[Identity]' section of rd.conf(5).
* Added an rdpadengined(8) service.
* Added a 'PYPAD_INSTANCES.IS_RUNNING' field to the database.
* Added a 'PYPAD_INSTANCES.EXIT_CODE' field to the database.
* Added a 'PYPAD_INSTANCES.ERROR_TEXT' field to the database.
* Incremented the database version to 304.
* Added a 'PYPAD_INSTANCES' table to the database.
* Incremented the database version to 303.
* Added a 'PyPAD Instances' button to the 'Edit Station' dialog
in rdadmin(1).
* Added a 'ListPyPAD Instances' dialog in rdadmin(1).
* Added an 'Edit PyPAD' Instance' dialog in rdadmin(1).
* Renamed 'apis/PyPAD/examples/pypad_test.py' to
'apisPyPAD/tests/pad_test.py'.
* Added a 'hostName' field to the JSON PAD 'padUpdate' object.
* Added a 'PyPAD.Update::hostName()' method.
* Added a 'shortHostName' field to the JSON PAD 'padUpdate' object.
* Added a 'PyPAD.Update::shortHostName()' method.
* Added a 'PyPAD.Update::resolveFilepath()' method.
* Added 'apis/PyPAD/tests/filepath_test.py.
* Added 'api/PyPAD/examples/pypad_filewrite.py'.
* Changed the name of the JSON PAD field 'logMachine' to 'machine'.
* Changed the name of the 'PyPAD.Update::logMachine()' method to
'PyPAD.Update::machine()'.
* Changed the name of the JSON PAD field 'logMode' to 'mode'.
* Added a 'PyPAD.Update::mode()' method.
* Added a 'cutNumber' field to the JSON PAD 'now' and 'next' objects.
* Added a 'PyPAD.FIELD_CUT_NUMBER' define.
* Added 'api/PyPAD/examples/pypad_test.py'.
* Renamed the 'PyPAD.Update::dateTime()' method to
'PyPAD.Update::dateTimeString()'.
* Changed the format of the 'dateTime' field in the PAD JSON structure
from RFC822 to ISO 8601.
* Added a 'startDateTime' field to the 'now' and 'next' objects in
the PAD JSON structure.
* Added a PAD Type enumeration for use in 'PyPAD.Update'.
* Added 'PyPAD.Update::hasPadType()' and 'PyPAD.Update.startDateTime()'
methods.
* Removed 'PyPAD.Update::hasNowPad()' and 'PyPAD.Update:hasNextPad()'
methods.
* Added support for '%d(<dt>)' and '%D(<dt>)' wildcards in
'PyPAD.Update::padFields()'.