* Added a 'SYSTEM.FIX_DUP_CART_TITLES' field to the database.
* Incremented the database version to 264.
* Added 'RDSystem::fixDuplicateCartTitles()' and
'RDSystem::setFixDuplicateCartTitles()' methods in 'lib/rdsystem.cpp'
and 'lib/rdsystem.h'.
* Added an 'Auto-Correct Duplicate Cart Titles' checkbox to the
'System Settings' dialog in 'rdadmin/edit_settings.cpp' and
'rdadmin/edit_settings.h'.
* Modified the 'EditCart' web call to enforce the 'Auto-Correct
Duplicate Cart Titles' setting.
* Fixed a bug in 'lib/rdcart.cpp' that caused the 'Import' web API call
to return 404 when importing with 'CREATE' set to '1' and unique titles
enabled in the database.
* Added an rdauth(1) utility in 'utils/rdauth/'.
* Fixed a regression in 'lib/rdcart.cpp' that caused the 'Import'
web API call to fail with an 'unsupported format' error.
* Fixed a regression in 'web/rdxport/rdxport.cpp' that broke
the CreateTicket web API call when connecting from localhost
or the machines registered IP address.
* Added a 'USERS.LOCAL_AUTH' field to the database.
* Added a 'USERS.PAM_SERVICE' field to the database.
* Added an index on 'STATIONS.IPV4_ADDRESS' to the database.
* Incremented the database version to 262.
* Added 'RDUser::localAuthentication()',
'RDUser::setLocalAuthentication()', 'RDUser::pamService()' and
'RDUser::setPamService()' methods in 'lib/rduser.cpp' and
'lib/rduser.h'.
* Added 'PAM Service' and 'Authenticate This User Locally' controls
to the Edit User dialog in 'rdadmin/edit_user.cpp' and
'rdadmin/edit_user.h'.
* Added a PAM service configuration in 'conf/rivendell.pam'.
* Changed the result code of the 'AddCart' service when the cart
already exists from '403' to '400'.
* Changed the result code of the 'EditCart' service when attempting
to set a forced length on a macro cart from '403' to '400'.
* Changed the result code of the 'EditCart' service when attempting
to set a forced length outside of the valid range from '403' to '400'.
* Changed the result code of the 'Export' service when attempting
to export from a cut with no audio content from '403' to '404'.
* Changed the '401' result code of the 'EditCart' service to be 403.
* Changed the '401' result code of the 'DeleteAudio' service to be 403.
* Changed the '401' result code of the 'Export' service to be 403.
* Added a 'CUTS.SHA1_HASH' field to the database.
* Incremented the database version to 261.
* Added a 'Sha1' column to the Cut List in 'rdlibrary/audio_cart.cpp'.
* Added 'RDCut::sha1Hash()' and 'RDCut::setSha1Hash()' methods in
'lib/rdcut.cpp' and 'lib/rdcut.h'.
* Added a '--rehash=' directive to rddbcheck(8).
* Added a 'Rehash' Web API call.
* Added an 'RDRehash' class in 'lib/rdrehash.cpp' and 'lib/rdrehash.h'.
* Added a 'WEBAPI_AUTHS' table to the database.
* Added a 'USERS.WEBAPI_AUTH_TIMEOUT' field to the database.
* Incremented the database version to 260.
* Added 'RDUser::webapiAuthTimeout()' and
'RDUser::setWebapiAuthTimeout()' methods in 'lib/rduser.cpp' and
'lib/rduser.h'.
* Added a 'WebAPI Timeout' control to the Edit User dialog in
'rdadmin/edit_user.cpp' and 'rdadmin/edit_user.h'.
* Implemented a 'CreateTicket' Web API call.
* Fixed a bug in 'lib/rdaudioconvert.cpp' that caused conversions
from MPEG Layer 3 VBR data to be truncated when no end point
was specified.
* Fixed a bug in 'web/rdxport/import.cpp' that caused the
end marker to be positioned incorrectly when importing MPEG
Layer 3 VBR files.
* Added 'RDCart::xmlSql()' and second 'RDCart::xml()' methods.
* Refactored the 'RDCart::xml()' method to use a SQL query.
* Refactored the Cart and Cut web methods in 'web/rdxport/carts.cpp'
to use SQL queries.
* Modified 'lib/rdformpost.cpp' to use read-only accessors for
std::map values.
* Added a check for valid event IDs for the 'SaveLog' method in
'web/rdxport/logs.cpp'.
* Fixed a bug in 'web/tests/editcut.js' that caused the EditCut
test harness to fail when using non-localhost URLs.
* Fixed a bug in 'web/tests/editcart.js' that caused the EditCut
test harness to fail when using non-localhost URLs.
* Added an 'AddLog' method to the Web API.
* Added an 'DeleteLog' method to the Web API.
* Added a 'SaveLog' method to the Web API.
* Added 'eventLength', 'linkEventName', 'linkStartSlop',
'linkEndSlop', 'linkId', 'linkEmbedded', 'extStartTime',
'extLength', 'extCartName', 'extData', 'extEventId',
and 'extAnncType' XML fields to the return of the ListLog web
API method
* Implemented storage of RDXML data structures within a 'rdxl'
user defined information frame in ID3 tags 'lib/rdwavefile.cpp' and
'lib/rdaudio_convert.cpp'.
Most files are simple swaps to get rid of extra " as a NULL return will give
invalid SQL if used as follows UPDATE x SET y="NULL";
See github issue 121 for more info.
Extra changes have been made to the following files:
* lib/rdcartslot.cpp
- Added a QDateTime variable to prevent EVENT_DATETIME becoming
"2016-06-09" "NULL" as it was checked separately for date and time
* lib/rdcut.cpp
- Reworked START_DATETIME and END_DATETIME to save the SQL ifs. I believe this
makes it easier to read and understand.
- The >QDate(1900,1,1) and < 8000 is probably not needed but I left it there
just in case.
* lib/rdescape_string.cpp
- Reworked to add extra " if the date is not NULL see issue 121
* lib/rdfeed.cpp && lib/rdpodcast.cpp
- Had to add a SetRow for QDateTime as with the string conversion the existing
SetRow would add an extra set of "
* lib/rdsound_panel.cpp && rdairplay/log_traffic.cpp
&& utils/rddgimport/rddgimport.cpp
- Added a QString to contain EVENT_DATETIME to prevent double checks of date
and time separately (similar to lib/rdcartslot.cpp)
* rdcatchd/rdcatchd.cpp
- Reverted the changes. The RML here is not touching the DB so is fine, plus
with the RDCheckDateTime changes you'd have extra " unless it was NULL
* tests/sas_switch_torture.cpp && sas_torture.cpp
- Included missing rdescape_string.h
* Added an entry for the Broadcast Tools SRC-16 in
'docs/SWITCHERS.txt'.
* Added a 'CUT_EVENTS' table to the database.
* Added a 'DECK_EVENTS' table to the database.
* Incremented the database version to 256.
* Implemented a 'Cut Event' ['CE'] RML.
* Added a 'Event Carts' section to the Edit Deck dialog in
'rdadmin/edit_deck.cpp' and 'rdadmin/edit_deck.h'.
* Update web test methods in 'web/tests/'.
* Added an 'RDSchedCode' class in 'lib/rdschedcode.cpp' and
'lib/rdschedcode.h'.
* Implemented the 'ListSchedCodes' web method in
'web/rdxport/schedcodes.cpp'.
* Implemented the 'AssignSchedCode' web method in
'web/rdxport/schedcodes.cpp'.
* Implemented the 'UnassignSchedCode' web method in
'web/rdxport/schedcodes.cpp'.
* Implemented the 'ListCartSchedCodes' web method in
'web/rdxport/schedcodes.cpp'.
* Extended 'RDGetWebTime()' and 'RDGetWebDateTime()' functions to
support XML 'xs' namespace formats.
* Implemented '*_POINT' fields in the 'EditCut' web method in
'web/rdxport/carts.cpp'.
* Modified the 'RDCart::removeSchedCode()' method so as to treat
scheduler codes in a case-insensitve manner.
* Modified the return of the 'EditCut' web method to provide a full
<cutList> record in 'web/rdxport/carts.cpp'.
* Added a 'Type' control to 'web/tests/listcart.html'.
* Fixed a bug in 'web/rdxport/carts.cpp' that broke the 'ListCarts'
API call when no group was specified.
* Added an 'RDAudioConvert::Stage3Pcm24()' method in
'lib/rdaudioconvert.cpp' and 'lib/rdaudioconvert.h'.
* Added a 'Format::Pcm24' value to the 'RDSettings::Format'
enumeration in 'lib/rdsettings.h'.
* Modified the 'RDAudioConvert' class to support generating PCM24
output in 'lib/rdaudioconvert.cpp' and 'lib/rdaudioconvert.h'.
* Modified the 'RDPlayStream' class to support playing PCM24
data in 'rdhpi/rdplaystream.cpp'.
* Modified the 'RDRecordStream' class to support capturing PCM24
data in 'rdhpi/rdrecordstream.cpp'.
* Added an 'audio_peaks_test' harness in 'tests/audio_peaks_test.cpp'
and 'tests/audio_peaks_test.h'.
* Added 'PCM24' to the list of available formats in
'rdadmin/edit_rdlibrary.cpp' and 'rdadmin/edit_rdlibrary.h'.
* Added 'PCM24' to the list of available formats in
'rdadmin/edit_decks.cpp'.
* Added PCM24 support for file importation in
'web/rdxport/import.cpp'.
* Added an 'RDCae::Pcm24' value to the 'RDCae::AudioCoding
enumeration in 'lib/rdcae.h'.
* Implemented the 'RDXPORT_COMMAND_AUDIOSTORE' web API call in
'web/rdxport/audiostore.cpp', 'web/rdxport/rdxport.cpp' and
'web/rdxport/rdxport.h'.
* Added an 'RDAudioStore' class in 'lib/rdaudiostore.cpp' and
'lib/rdaudiostore.h'.
* Modified the Desk Gauge widget in 'rdlibrary/disk_gauge.cpp'
and 'rdlibrary/disk_gauge.h' to use the 'RDAudioStore' class
[fixes GitHub issue #000035].
* Fixed a regression in 'web/rdcastmanager/Makefile.am' that caused
the incorrect executable to be installed for 'rdcastmanager.cgi'.
* Refactored SQL statements in 'lib/rdweb.cpp'.
* Modified 'conf/Makefile.am' to install 'rd-bin.conf' in
$(sysconfdir).
* Updated 'INSTALL' to include information about the '--sysconfdir'
flag.
* Updated 'get_distro.sh' to detect RHEL 7 correctly.
* Modified the installation script to work on RHEL 7 in
'rivendell.spec.in'.
* Fixed a bug in 'Makefile.am' that broke the 'make install' rule
when using DESTDIR.
* Fixed a bug in 'icons/Makefile.am' that broke the 'make install'
rule when using DESTDIR.
* Fixed a bug in 'rlm/Makefile.am' that broke the 'make install'
rule when using DESTDIR.
* Fixed a bug in 'scripts/Makefile.am' that broke the 'make install'
rule when using DESTDIR.
* Fixed a bug in 'xdg/Makefile.am' that broke the 'make install'
rule when using DESTDIR.
* Fixed a bug in 'rdselect/Makefile.am' that broke the 'make install'
rule when using DESTDIR.
* Fixed a bug in 'web/rdxport/Makefile.am' that broke the
'make install' rule when using DESTDIR.
* Fixed a bug in 'configure.ac' that cause an incorrect VERSION
string to be generated.
* Fixed warnings in 'lib/rdaudioconvert.cpp'.
* Fixed warnings in 'lib/rdaudioexport.cpp'.
* Fixed warnings in 'lib/rdaudioimport.cpp'.
* Fixed warnings in 'lib/rdcart_dialog.cpp'.
* Fixed warnings in 'lib/rdconf.cpp'.
* Fixed warnings in 'lib/rdcopyaudio.cpp'.
* Fixed warnings in 'lib/rdescape_string.cpp'.
* Fixed warnings in 'lib/rdevent_line.cpp'.
* Fixed warnings in 'lib/rdfeed.cpp'.
* Refactored 'RDOneShot' to use int values in 'lib/rdoneshot.cpp'
and 'lib/rdoneshot.h'.
* Fixed warnings in 'lib/rdpeaksexport.cpp'.
* Fixed warnings in 'lib/rdtrimaudio.cpp'.
* Fixed warnings in 'lib/rdwavefile.cpp'.
* Fixed warnings in 'rdhpi/rdhpiplaystream.cpp'.
* Fixed warnings in 'rdhpi/rdhpirecordstream.cpp'.
* Fixed warnings in 'rdhpi/rdhpisoundcard.cpp'.
* Fixed warnings in 'pam_rd/pam_rd.cpp'.
* Fixed warnings in 'rdadmin/edit_rdairplay.cpp'.
* Fixed warnings in 'rdairplay/list_log.cpp'.
* Fixed warnings in 'rdairplay/log_play.cpp'.
* Fixed warnings in 'rdairplay/pie_counter.cpp'.
* Fixed warnings in 'rdairplay/rlm_host.cpp'.
* Fixed warnings in 'rdcatchd/rdcatchd.cpp'.
* Fixed warnings in 'rdlogedit/editlog.cpp'.
* Fixed warnings in 'rdlogmanager/rdlogmanager.cpp'.
* Fixed warnings in 'rdrepl/replfactory.h'.
* Fixed warnings in 'ripcd/acu1p.cpp' and 'ripcd/acu1p.h'.
* Fixed warnings in 'ripcd/bt16x2.cpp' and 'ripcd/bt16x2.h'.
* Fixed warnings in 'ripcd/btss164.cpp' and 'ripcd/btss164.h'.
* Fixed warnings in 'ripcd/btss42.cpp' and 'ripcd/btss42.h'.
* Fixed warnings in 'ripcd/btss44.cpp' and 'ripcd/btss44.h'.
* Fixed warnings in 'ripcd/btss82.cpp' and 'ripcd/btss82.h'.
* Fixed warnings in 'ripcd/btsrc16.cpp' and 'ripcd/btsrc16.h'.
* Fixed warnings in 'ripcd/btsrc8iii.cpp' and 'ripcd/btsrc8iii.h'.
* Fixed warnings in 'ripcd/livewire_mcastgpio.cpp'.
* Fixed warnings in 'ripcd/local_gpio.cpp' and 'ripcd/local_gpio.h'.
* Fixed warnings in 'ripcd/sas64000gpi.cpp' and 'ripcd/sas64000gpi.h'.
* Fixed warnings in 'ripcd/vguest.cpp' and 'ripcd/vguest.h'.
* Fixed warnings in 'utils/rdhpiinfo/rdhpiinfo.cpp'
* Fixed warnings in 'utils/rdgen/wavlib.cpp'
* Fixed warnings in 'utils/rdimport/rdimport.cpp'
* Fixed warnings in 'utils/rdsoftkeys/rdsoftkeys.cpp'
* Fixed warnings in 'web/rdxport/export.cpp'