Browse Source

2020-10-31 Fred Gleason <fredg@paravelsystems.com>

* Added an 'RDApplication::ExitCode'.
	* Implemented 'RDApplication::ExitCode' in rdimport(1).
	* Implemented 'RDApplication::ExitCode' in rdlogmanager(1).
	* Implemented 'RDApplication::ExitCode' in rdservice(8).

Signed-off-by: Fred Gleason <fredg@paravelsystems.com>
pull/635/head
Fred Gleason 3 years ago
parent
commit
2aa5aea4f9
  1. 5
      ChangeLog
  2. 3
      docs/manpages/Makefile.am
  3. 32
      docs/manpages/exitcodes.xml
  4. 19
      docs/manpages/rdimport.xml
  5. 44
      docs/manpages/rdlogmanager.xml
  6. 38
      docs/manpages/rdservice.xml
  7. 76
      lib/librd_cs.ts
  8. 76
      lib/librd_de.ts
  9. 76
      lib/librd_es.ts
  10. 76
      lib/librd_fr.ts
  11. 76
      lib/librd_nb.ts
  12. 76
      lib/librd_nn.ts
  13. 76
      lib/librd_pt_BR.ts
  14. 17
      lib/rd.h
  15. 85
      lib/rdapplication.cpp
  16. 7
      lib/rdapplication.h
  17. 10
      rdlogmanager/commandline_ops.cpp
  18. 34
      rdlogmanager/logobject.cpp
  19. 18
      rdlogmanager/rdlogmanager.cpp
  20. 10
      rdservice/rdservice.cpp
  21. 106
      utils/rdimport/rdimport.cpp
  22. 2
      utils/rdimport/rdimport.h

5
ChangeLog

@ -20520,3 +20520,8 @@
* Added a 'put' section to the WebGet interface.
2020-10-31 Fred Gleason <fredg@paravelsystems.com>
* Added an '--output-pattern' switch to rdimport(1).
2020-10-31 Fred Gleason <fredg@paravelsystems.com>
* Added an 'RDApplication::ExitCode'.
* Implemented 'RDApplication::ExitCode' in rdimport(1).
* Implemented 'RDApplication::ExitCode' in rdlogmanager(1).
* Implemented 'RDApplication::ExitCode' in rdservice(8).

3
docs/manpages/Makefile.am

@ -65,7 +65,8 @@ man_MANS = rdairplay.1\
rdservice.8\
rdsoftkeys.1
EXTRA_DIST = rdairplay.1\
EXTRA_DIST = exitcodes.xml\
rdairplay.1\
rdairplay.xml\
rdalsaconfig.1\
rdalsaconfig.xml\

32
docs/manpages/exitcodes.xml

@ -0,0 +1,32 @@
<!--
This is the full set of defined exit codes in Rivendell
A subset of these should go in each man page.
-->
<refsect1 id='exit_values'><title>Exit Values</title>
<para>
<segmentedlist>
<?dbhtml list-presentation="tabular"?>
<?dbfo list-presentation="tabular"?>
<segtitle></segtitle>
<segtitle></segtitle>
<seglistitem><seg>0</seg><seg>Normal exit</seg></seglistitem>
<seglistitem><seg>1</seg><seg>Prior instance already running</seg></seglistitem>
<seglistitem><seg>2</seg><seg>Unable to open database</seg></seglistitem>
<seglistitem><seg>3</seg><seg>Unable to start a service component</seg></seglistitem>
<seglistitem><seg>4</seg><seg>Unknown/invalid command line option</seg></seglistitem>
<seglistitem><seg>5</seg><seg>Unable to overwrite output [-P given]</seg></seglistitem>
<seglistitem><seg>6</seg><seg>No such service</seg></seglistitem>
<seglistitem><seg>7</seg><seg>No such log</seg></seglistitem>
<seglistitem><seg>8</seg><seg>No such report</seg></seglistitem>
<seglistitem><seg>9</seg><seg>Log generation failed</seg></seglistitem>
<seglistitem><seg>10</seg><seg>Schedule import failed</seg></seglistitem>
<seglistitem><seg>11</seg><seg>Insufficient permissions</seg></seglistitem>
<seglistitem><seg>12</seg><seg>Report generation failed</seg></seglistitem>
<seglistitem><seg>13</seg><seg>One or more audio imports failed</seg></seglistitem>
<seglistitem><seg>14</seg><seg>Unknown dropbox ID</seg></seglistitem>
<seglistitem><seg>15</seg><seg>No such group</seg></seglistitem>
<seglistitem><seg>16</seg><seg>Invalid cart number</seg></seglistitem>
<seglistitem><seg>17</seg><seg>No such scheduler code</seg></seglistitem>
</segmentedlist>
</para>
</refsect1>

19
docs/manpages/rdimport.xml

@ -947,6 +947,25 @@
</variablelist>
</refsect1>
<refsect1 id='exit_values'><title>Exit Values</title>
<para>
<segmentedlist>
<?dbhtml list-presentation="tabular"?>
<?dbfo list-presentation="tabular"?>
<segtitle></segtitle>
<segtitle></segtitle>
<seglistitem><seg>0</seg><seg>Normal exit</seg></seglistitem>
<seglistitem><seg>2</seg><seg>Unable to open database</seg></seglistitem>
<seglistitem><seg>4</seg><seg>Unknown/invalid command line option</seg></seglistitem>
<seglistitem><seg>13</seg><seg>One or more audio imports failed</seg></seglistitem>
<seglistitem><seg>14</seg><seg>Unknown dropbox ID</seg></seglistitem>
<seglistitem><seg>15</seg><seg>No such group</seg></seglistitem>
<seglistitem><seg>16</seg><seg>Invalid cart number</seg></seglistitem>
<seglistitem><seg>17</seg><seg>No such scheduler code</seg></seglistitem>
</segmentedlist>
</para>
</refsect1>
<refsect1>
<title>NOTES</title>
<para>

44
docs/manpages/rdlogmanager.xml

@ -186,29 +186,27 @@
</variablelist>
</refsect1>
<refsect1 id='exit_values'><title>Exit Values</title>
<para>
<segmentedlist>
<?dbhtml list-presentation="tabular"?>
<?dbfo list-presentation="tabular"?>
<segtitle></segtitle>
<segtitle></segtitle>
<seglistitem><seg>0</seg><seg>Normal exit</seg></seglistitem>
<seglistitem><seg>1</seg><seg>Prior instance found</seg></seglistitem>
<seglistitem><seg>2</seg><seg>Unable to open database</seg></seglistitem>
<seglistitem><seg>3</seg><seg>Unable to start a service component</seg></seglistitem>
<seglistitem><seg>4</seg><seg>Unrecognized/invalid command line option</seg></seglistitem>
<seglistitem><seg>5</seg><seg>Output overwrite protected</seg></seglistitem>
<seglistitem><seg>6</seg><seg>No such service</seg></seglistitem>
<seglistitem><seg>7</seg><seg>No such log</seg></seglistitem>
<seglistitem><seg>8</seg><seg>No such report</seg></seglistitem>
<seglistitem><seg>9</seg><seg>Log generation failed</seg></seglistitem>
<seglistitem><seg>10</seg><seg>Schedule file import failed</seg></seglistitem>
<seglistitem><seg>11</seg><seg>Insufficient permissions</seg></seglistitem>
<seglistitem><seg>11</seg><seg>Report generation failed</seg></seglistitem>
</segmentedlist>
</para>
</refsect1>
<refsect1 id='exit_values'><title>Exit Values</title>
<para>
<segmentedlist>
<?dbhtml list-presentation="tabular"?>
<?dbfo list-presentation="tabular"?>
<segtitle></segtitle>
<segtitle></segtitle>
<seglistitem><seg>0</seg><seg>Normal exit</seg></seglistitem>
<seglistitem><seg>2</seg><seg>Unable to open database</seg></seglistitem>
<seglistitem><seg>4</seg><seg>Unknown/invalid command line option</seg></seglistitem>
<seglistitem><seg>5</seg><seg>Unable to overwrite output [-P given]</seg></seglistitem>
<seglistitem><seg>6</seg><seg>No such service</seg></seglistitem>
<seglistitem><seg>7</seg><seg>No such log</seg></seglistitem>
<seglistitem><seg>8</seg><seg>No such report</seg></seglistitem>
<seglistitem><seg>9</seg><seg>Log generation failed</seg></seglistitem>
<seglistitem><seg>10</seg><seg>Schedule import failed</seg></seglistitem>
<seglistitem><seg>11</seg><seg>Insufficient permissions</seg></seglistitem>
<seglistitem><seg>12</seg><seg>Report generation failed</seg></seglistitem>
</segmentedlist>
</para>
</refsect1>
<refsect1>
<title>BUGS</title>

38
docs/manpages/rdservice.xml

@ -92,29 +92,21 @@
</variablelist>
</refsect1>
<refsect1 id='exit_values'><title>Exit Values</title>
<para>
<segmentedlist>
<?dbhtml list-presentation="tabular"?>
<?dbfo list-presentation="tabular"?>
<segtitle></segtitle>
<segtitle></segtitle>
<seglistitem><seg>0</seg><seg>Normal exit</seg></seglistitem>
<seglistitem><seg>1</seg><seg>Prior instance found</seg></seglistitem>
<seglistitem><seg>2</seg><seg>Unable to open database</seg></seglistitem>
<seglistitem><seg>3</seg><seg>Unable to start a service component</seg></seglistitem>
<seglistitem><seg>4</seg><seg>Unrecognized/invalid command line option</seg></seglistitem>
<seglistitem><seg>5</seg><seg>Output overwrite protected</seg></seglistitem>
<seglistitem><seg>6</seg><seg>No such service</seg></seglistitem>
<seglistitem><seg>7</seg><seg>No such log</seg></seglistitem>
<seglistitem><seg>8</seg><seg>No such report</seg></seglistitem>
<seglistitem><seg>9</seg><seg>Log generation failed</seg></seglistitem>
<seglistitem><seg>10</seg><seg>Schedule file import failed</seg></seglistitem>
<seglistitem><seg>11</seg><seg>Insufficient permissions</seg></seglistitem>
<seglistitem><seg>11</seg><seg>Report generation failed</seg></seglistitem>
</segmentedlist>
</para>
</refsect1>
<refsect1 id='exit_values'><title>Exit Values</title>
<para>
<segmentedlist>
<?dbhtml list-presentation="tabular"?>
<?dbfo list-presentation="tabular"?>
<segtitle></segtitle>
<segtitle></segtitle>
<seglistitem><seg>0</seg><seg>Normal exit</seg></seglistitem>
<seglistitem><seg>1</seg><seg>Prior instance already running</seg></seglistitem>
<seglistitem><seg>2</seg><seg>Unable to open database</seg></seglistitem>
<seglistitem><seg>3</seg><seg>Unable to start a service component</seg></seglistitem>
<seglistitem><seg>4</seg><seg>Unknown/invalid command line option</seg></seglistitem>
</segmentedlist>
</para>
</refsect1>
<refsect1 id='see_also'><title>See Also</title>
<para>

76
lib/librd_cs.ts

@ -990,6 +990,82 @@
<source>Rivendell service is not active.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>unknown</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>ok</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>prior instance already running</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>unable to open database</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>unable to start a service component</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>unknown/invalid command option</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>unable to overwrite output [-P given]</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>no such service</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>no such log</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>no such report</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>log generation failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>schedule import failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>insufficient permissions</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>report generation failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>one or more audio imports failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>unknown dropbox id</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>no such group</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>invalid cart number</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>no such scheduler code</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>RDAudioSettingsDialog</name>

76
lib/librd_de.ts

@ -986,6 +986,82 @@
<source>Rivendell service is not active.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>unknown</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>ok</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>prior instance already running</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>unable to open database</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>unable to start a service component</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>unknown/invalid command option</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>unable to overwrite output [-P given]</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>no such service</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>no such log</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>no such report</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>log generation failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>schedule import failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>insufficient permissions</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>report generation failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>one or more audio imports failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>unknown dropbox id</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>no such group</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>invalid cart number</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>no such scheduler code</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>RDAudioSettingsDialog</name>

76
lib/librd_es.ts

@ -986,6 +986,82 @@
<source>OK</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>unknown</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>ok</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>prior instance already running</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>unable to open database</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>unable to start a service component</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>unknown/invalid command option</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>unable to overwrite output [-P given]</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>no such service</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>no such log</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>no such report</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>log generation failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>schedule import failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>insufficient permissions</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>report generation failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>one or more audio imports failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>unknown dropbox id</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>no such group</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>invalid cart number</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>no such scheduler code</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>RDAudioSettingsDialog</name>

76
lib/librd_fr.ts

@ -952,6 +952,82 @@
<source>OK</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>unknown</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>ok</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>prior instance already running</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>unable to open database</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>unable to start a service component</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>unknown/invalid command option</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>unable to overwrite output [-P given]</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>no such service</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>no such log</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>no such report</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>log generation failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>schedule import failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>insufficient permissions</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>report generation failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>one or more audio imports failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>unknown dropbox id</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>no such group</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>invalid cart number</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>no such scheduler code</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>RDAudioSettingsDialog</name>

76
lib/librd_nb.ts

@ -986,6 +986,82 @@
<source>Rivendell service is not active.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>unknown</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>ok</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>prior instance already running</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>unable to open database</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>unable to start a service component</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>unknown/invalid command option</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>unable to overwrite output [-P given]</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>no such service</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>no such log</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>no such report</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>log generation failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>schedule import failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>insufficient permissions</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>report generation failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>one or more audio imports failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>unknown dropbox id</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>no such group</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>invalid cart number</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>no such scheduler code</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>RDAudioSettingsDialog</name>

76
lib/librd_nn.ts

@ -986,6 +986,82 @@
<source>Rivendell service is not active.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>unknown</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>ok</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>prior instance already running</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>unable to open database</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>unable to start a service component</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>unknown/invalid command option</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>unable to overwrite output [-P given]</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>no such service</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>no such log</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>no such report</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>log generation failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>schedule import failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>insufficient permissions</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>report generation failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>one or more audio imports failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>unknown dropbox id</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>no such group</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>invalid cart number</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>no such scheduler code</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>RDAudioSettingsDialog</name>

76
lib/librd_pt_BR.ts

@ -986,6 +986,82 @@
<source>Rivendell service is not active.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>unknown</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>ok</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>prior instance already running</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>unable to open database</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>unable to start a service component</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>unknown/invalid command option</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>unable to overwrite output [-P given]</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>no such service</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>no such log</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>no such report</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>log generation failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>schedule import failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>insufficient permissions</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>report generation failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>one or more audio imports failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>unknown dropbox id</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>no such group</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>invalid cart number</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>no such scheduler code</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>RDAudioSettingsDialog</name>

17
lib/rd.h

@ -615,23 +615,6 @@
*/
#define RD_RSS_XML_FILE_EXTENSION "rss"
/*
* Exit Codes
*/
#define RD_EXIT_OK 0 // Normal exit
#define RD_EXIT_PRIOR_INSTANCE 1 // Prior instance found
#define RD_EXIT_NO_DB 2 // Unable to open database
#define RD_EXIT_SVC_FAILED 3 // Unable to start a service component
#define RD_EXIT_UNKNOWN_OPTION 4 // Unrecognized command line option
#define RD_EXIT_OUTPUT_PROTECTED 5 // Couldn't overwrite output (-P)
#define RD_EXIT_NO_SERVICE 6 // No such service
#define RD_EXIT_NO_LOG 7 // No such log
#define RD_EXIT_NO_REPORT 8 // No such report
#define RD_EXIT_LOG_GEN_FAILED 9 // Log generation failed
#define RD_EXIT_LOG_LINK_FAILED 10 // Schedule import failed
#define RD_EXIT_NO_PERMS 11 // Insufficient permissions
#define RD_EXIT_REPORT_FAILED 12 // Report generation failed
/*
* Shelf life for GPIO event records
*/

85
lib/rdapplication.cpp

@ -353,6 +353,91 @@ void RDApplication::syslog(RDConfig *config,int priority,const char *fmt,...)
}
QString RDApplication::exitCodeText(RDApplication::ExitCode code)
{
QString ret=tr("unknown")+QString().sprintf(" [%u]",code);
switch(code) {
case RDApplication::ExitOk:
ret=tr("ok");
break;
case RDApplication::ExitPriorInstance:
ret=tr("prior instance already running");
break;
case RDApplication::ExitNoDb:
ret=tr("unable to open database");
break;
case RDApplication::ExitSvcFailed:
ret=tr("unable to start a service component");
break;
case RDApplication::ExitInvalidOption:
ret=tr("unknown/invalid command option");
break;
case RDApplication::ExitOutputProtected:
ret=tr("unable to overwrite output [-P given]");
break;
case RDApplication::ExitNoSvc:
ret=tr("no such service");
break;
case RDApplication::ExitNoLog:
ret=tr("no such log");
break;
case RDApplication::ExitNoReport:
ret=tr("no such report");
break;
case RDApplication::ExitLogGenFailed:
ret=tr("log generation failed");
break;
case RDApplication::ExitLogLinkFailed:
ret=tr("schedule import failed");
break;
case RDApplication::ExitNoPerms:
ret=tr("insufficient permissions");
break;
case RDApplication::ExitReportFailed:
ret=tr("report generation failed");
break;
case RDApplication::ExitImportFailed:
ret=tr("one or more audio imports failed");
break;
case RDApplication::ExitNoDropbox:
ret=tr("unknown dropbox id");
break;
case RDApplication::ExitNoGroup:
ret=tr("no such group");
break;
case RDApplication::ExitInvalidCart:
ret=tr("invalid cart number");
break;
case RDApplication::ExitNoSchedCode:
ret=tr("no such scheduler code");
break;
case RDApplication::ExitLast:
break;
}
return ret;
}
void RDApplication::userChangedData()
{
app_user->setName(app_ripc->user());

7
lib/rdapplication.h

@ -47,6 +47,12 @@ class RDApplication : public QObject
public:
enum ErrorType {ErrorOk=0,ErrorDbVersionSkew=1,ErrorNoHostEntry=2,
ErrorNoService=3};
enum ExitCode {ExitOk=0,ExitPriorInstance=1,ExitNoDb=2,ExitSvcFailed=3,
ExitInvalidOption=4,ExitOutputProtected=5,ExitNoSvc=6,
ExitNoLog=7,ExitNoReport=8,ExitLogGenFailed=9,
ExitLogLinkFailed=10,ExitNoPerms=11,ExitReportFailed=12,
ExitImportFailed=13,ExitNoDropbox=14,ExitNoGroup=15,
ExitInvalidCart=16,ExitNoSchedCode=17,ExitLast=18};
RDApplication(const QString &module_name,const QString &cmdname,
const QString &usage,QObject *parent=0);
~RDApplication();
@ -69,6 +75,7 @@ class RDApplication : public QObject
void logAuthenticationFailure(const QHostAddress &orig_addr,
const QString &login_name=QString());
static void syslog(RDConfig *config,int priority,const char *fmt,...);
static QString exitCodeText(ExitCode code);
private slots:
void userChangedData();

10
rdlogmanager/commandline_ops.cpp

@ -51,7 +51,7 @@ int RunReportOperation(int argc,char *argv[],const QString &rptname,
rda=new RDApplication("RDLogManager","rdlogmanager",RDLOGMANAGER_USAGE);
if(!rda->open(&err_msg)) {
fprintf(stderr,"rdlogmanager: %s\n",err_msg.toUtf8().constData());
exit(RD_EXIT_NO_DB);
exit(RDApplication::ExitNoDb);
}
//
@ -60,7 +60,7 @@ int RunReportOperation(int argc,char *argv[],const QString &rptname,
RDReport *report=new RDReport(rptname,rda->station(),rda->config());
if(!report->exists()) {
fprintf(stderr,"rdlogmanager: no such report\n");
return RD_EXIT_NO_REPORT;
return RDApplication::ExitNoReport;
}
//
@ -71,14 +71,14 @@ int RunReportOperation(int argc,char *argv[],const QString &rptname,
fprintf(stderr,"report \"%s\" for %s already exists\n",
(const char *)rptname.utf8(),
(const char *)yesterday.addDays(start_offset).toString());
exit(RD_EXIT_OUTPUT_PROTECTED);
exit(RDApplication::ExitOutputProtected);
}
if(!report->generateReport(yesterday.addDays(start_offset),
yesterday.addDays(end_offset),rda->station(),
&out_path)) {
fprintf(stderr,"rdlogmanager: report generation failed [%s]\n",
(const char *)RDReport::errorText(report->errorCode()));
return RD_EXIT_REPORT_FAILED;
return RDApplication::ExitReportFailed;
}
return RD_EXIT_OK;
return RDApplication::ExitOk;
}

34
rdlogmanager/logobject.cpp

@ -49,7 +49,7 @@ LogObject::LogObject(const QString &svcname,int start_offset,
rda=new RDApplication("RDLogManager","rdlogmanager","");
if(!rda->open(&err_msg)) {
fprintf(stderr,"rdlogmanager: %s\n",err_msg.toUtf8().constData());
exit(RD_EXIT_NO_DB);
exit(RDApplication::ExitNoDb);
}
connect(rda,SIGNAL(userChanged()),this,SLOT(userData()));
@ -73,7 +73,7 @@ void LogObject::userData()
RDSvc *svc=new RDSvc(log_service_name,rda->station(),rda->config());
if(!svc->exists()) {
fprintf(stderr,"rdlogmanager: no such service\n");
exit(RD_EXIT_NO_SERVICE);
exit(RDApplication::ExitNoSvc);
}
QDate start_date=QDate::currentDate().addDays(1+log_start_offset);
QString logname=
@ -88,7 +88,7 @@ void LogObject::userData()
if(log_protect_existing&&log->exists()) {
fprintf(stderr,"log \"%s\" already exists\n",
log->name().utf8().constData());
exit(RD_EXIT_OUTPUT_PROTECTED);
exit(RDApplication::ExitOutputProtected);
}
SendNotification(RDNotification::DeleteAction,log->name());
log->removeTracks(rda->station(),rda->user(),rda->config());
@ -101,7 +101,7 @@ void LogObject::userData()
&unused_report,rda->user(),&err_msg)) {
fprintf(stderr,"rdlogmanager: log generation failed\n");
printf("%s\n",err_msg.toUtf8().constData());
exit(RD_EXIT_LOG_GEN_FAILED);
exit(RDApplication::ExitLogGenFailed);
}
log->updateTracks();
SendNotification(RDNotification::AddAction,log->name());
@ -124,33 +124,33 @@ void LogObject::userData()
if(log_merge_music) {
if(!log->exists()) {
fprintf(stderr,"rdlogmanager: log does not exist\n");
exit(RD_EXIT_NO_LOG);
exit(RDApplication::ExitNoLog);
}
if(log_protect_existing&&
(log->linkState(RDLog::SourceMusic)==RDLog::LinkDone)) {
fprintf(stderr,
"rdlogmanager: music for log \"%s\" is already imported\n",
log->name().utf8().constData());
exit(RD_EXIT_LOG_LINK_FAILED);
exit(RDApplication::ExitLogLinkFailed);
}
if((!log->includeImportMarkers())&&
(log->linkState(RDLog::SourceMusic)!=RDLog::LinkMissing)) {
fprintf(stderr,
"rdlogmanager: music for log \"%s\" cannot be reimported\n",
log->name().utf8().constData());
exit(RD_EXIT_LOG_LINK_FAILED);
exit(RDApplication::ExitLogLinkFailed);
}
report="";
log->removeTracks(rda->station(),rda->user(),rda->config());
if(!svc->clearLogLinks(RDSvc::Traffic,logname,rda->user(),&err_msg)) {
fprintf(stderr,"rdlogmanager: music import failed\n");
printf("%s\n",err_msg.toUtf8().constData());
exit(RD_EXIT_LOG_LINK_FAILED);
exit(RDApplication::ExitLogLinkFailed);
}
if(!svc->clearLogLinks(RDSvc::Music,logname,rda->user(),&err_msg)) {
fprintf(stderr,"rdlogmanager: music import failed\n");
printf("%s\n",err_msg.toUtf8().constData());
exit(RD_EXIT_LOG_LINK_FAILED);
exit(RDApplication::ExitLogLinkFailed);
}
if(svc->linkLog(RDSvc::Music,start_date,logname,&report,rda->user(),
&err_msg)) {
@ -159,7 +159,7 @@ void LogObject::userData()
else {
fprintf(stderr,"rdlogmanager: music import failed\n");
printf("%s\n",err_msg.toUtf8().constData());
exit(RD_EXIT_LOG_LINK_FAILED);
exit(RDApplication::ExitLogLinkFailed);
}
SendNotification(RDNotification::ModifyAction,log->name());
}
@ -170,27 +170,27 @@ void LogObject::userData()
if(log_merge_traffic) {
if(!log->exists()) {
fprintf(stderr,"rdlogmanager: log does not exist\n");
exit(RD_EXIT_NO_LOG);
exit(RDApplication::ExitNoLog);
}
if(log_protect_existing&&
(log->linkState(RDLog::SourceTraffic)==RDLog::LinkDone)) {
fprintf(stderr,
"rdlogmanager: traffic for log \"%s\" is already imported\n",
(const char *)log->name().utf8());
exit(RD_EXIT_LOG_LINK_FAILED);
exit(RDApplication::ExitLogLinkFailed);
}
if((!log->includeImportMarkers())&&
(log->linkState(RDLog::SourceTraffic)!=RDLog::LinkMissing)) {
fprintf(stderr,
"rdlogmanager: traffic for log \"%s\" cannot be reimported\n",
log->name().utf8().constData());
exit(RD_EXIT_LOG_LINK_FAILED);
exit(RDApplication::ExitLogLinkFailed);
}
report="";
if(!svc->clearLogLinks(RDSvc::Traffic,logname,rda->user(),&err_msg)) {
fprintf(stderr,"rdlogmanager: traffic schedule import failed\n");
printf("%s\n",err_msg.toUtf8().constData());
exit(RD_EXIT_LOG_LINK_FAILED);
exit(RDApplication::ExitLogLinkFailed);
}
if(svc->linkLog(RDSvc::Traffic,start_date,logname,&report,rda->user(),
&err_msg)) {
@ -201,7 +201,7 @@ void LogObject::userData()
printf("%s\n",err_msg.toUtf8().constData());
delete log;
delete svc;
exit(RD_EXIT_LOG_LINK_FAILED);
exit(RDApplication::ExitLogLinkFailed);
}
SendNotification(RDNotification::ModifyAction,log->name());
}
@ -211,10 +211,10 @@ void LogObject::userData()
//
delete log;
delete svc;
exit(RD_EXIT_OK);
exit(RDApplication::ExitOk);
}
fprintf(stderr,"rdlogmanager: insufficient permissions\n");
exit(RD_EXIT_NO_PERMS);
exit(RDApplication::ExitNoPerms);
}

18
rdlogmanager/rdlogmanager.cpp

@ -2,7 +2,7 @@
//
// The Log Generator Utility for Rivendell.
//
// (C) Copyright 2002-2019 Fred Gleason <fredg@paravelsystems.com>
// (C) Copyright 2002-2020 Fred Gleason <fredg@paravelsystems.com>
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License version 2 as
@ -60,7 +60,7 @@ MainWidget::MainWidget(RDConfig *c,QWidget *parent)
rda=new RDApplication("RDLogManager","rdlogmanager",RDLOGMANAGER_USAGE,this);
if(!rda->open(&err_msg)) {
QMessageBox::critical(this,"RDLogManager - "+tr("Error"),err_msg);
exit(RD_EXIT_NO_DB);
exit(RDApplication::ExitNoDb);
}
setWindowTitle(tr("RDLogManager"));
@ -228,7 +228,7 @@ void MainWidget::reportsData()
void MainWidget::quitMainWidget()
{
exit(RD_EXIT_OK);
exit(RDApplication::ExitOk);
}
@ -319,7 +319,7 @@ int main(int argc,char *argv[])
}
else {
fprintf(stderr,"rdlogmanager: missing argument to \"-s\"\n");
exit(RD_EXIT_UNKNOWN_OPTION);
exit(RDApplication::ExitInvalidOption);
}
cmd->setProcessed(i,true);
}
@ -330,7 +330,7 @@ int main(int argc,char *argv[])
}
else {
fprintf(stderr,"rdlogmanager: missing argument to \"-r\"\n");
exit(RD_EXIT_UNKNOWN_OPTION);
exit(RDApplication::ExitInvalidOption);
}
cmd->setProcessed(i,true);
}
@ -341,7 +341,7 @@ int main(int argc,char *argv[])
}
else {
fprintf(stderr,"rdlogmanager: missing argument to \"-d\"\n");
exit(RD_EXIT_UNKNOWN_OPTION);
exit(RDApplication::ExitInvalidOption);
}
cmd->setProcessed(i,true);
}
@ -352,14 +352,14 @@ int main(int argc,char *argv[])
}
else {
fprintf(stderr,"rdlogmanager: missing argument to \"-e\"\n");
exit(RD_EXIT_UNKNOWN_OPTION);
exit(RDApplication::ExitInvalidOption);
}
cmd->setProcessed(i,true);
}
if(!cmd->processed(i)) {
fprintf(stderr,"rdlogmanager: unknown command option \"%s\"\n",
(const char *)cmd->key(i));
exit(RD_EXIT_UNKNOWN_OPTION);
exit(RDApplication::ExitInvalidOption);
}
}
delete cmd;
@ -367,7 +367,7 @@ int main(int argc,char *argv[])
(cmd_generate||cmd_merge_traffic||cmd_merge_music)) {
fprintf(stderr,
"rdlogmanager: log and report operations are mutually exclusive\n");
exit(RD_EXIT_UNKNOWN_OPTION);
exit(RDApplication::ExitInvalidOption);
}
if(cmd_generate||cmd_merge_traffic||cmd_merge_music) {

10
rdservice/rdservice.cpp

@ -65,7 +65,7 @@ MainObject::MainObject(QObject *parent)
//
if(RDGetPids("rdservice").size()>1) {
rda->syslog(LOG_ERR,"prior instance found");
exit(RD_EXIT_PRIOR_INSTANCE);
exit(RDApplication::ExitPriorInstance);
}
//
@ -75,7 +75,7 @@ MainObject::MainObject(QObject *parent)
if(!rda->open(&err_msg,&err_type,false)) {
rda->syslog(LOG_ERR,"unable to open database [%s]",
(const char *)err_msg.utf8());
exit(RD_EXIT_NO_DB);
exit(RDApplication::ExitNoDb);
}
//
@ -91,7 +91,7 @@ MainObject::MainObject(QObject *parent)
}
if(!rda->cmdSwitch()->processed(i)) {
fprintf(stderr,"rdservice: unknown command-line option\n");
exit(RD_EXIT_UNKNOWN_OPTION);
exit(RDApplication::ExitInvalidOption);
}
}
@ -109,7 +109,7 @@ MainObject::MainObject(QObject *parent)
Shutdown();
rda->syslog(LOG_ERR,"unable to start service component [%s]",
(const char *)err_msg.toUtf8());
exit(RD_EXIT_SVC_FAILED);
exit(RDApplication::ExitSvcFailed);
}
//
@ -149,7 +149,7 @@ void MainObject::exitData()
Shutdown();
RDDeletePid(RD_PID_DIR,"rdservice.pid");
rda->syslog(LOG_DEBUG,"shutting down normally");
exit(RD_EXIT_OK);
exit(RDApplication::ExitOk);
}
if(global_reload_dropboxes) {

106
utils/rdimport/rdimport.cpp

@ -98,6 +98,7 @@ MainObject::MainObject(QObject *parent)
import_clear_dayparts=false;
import_xml=false;
import_to_mono=false;
import_failed_imports=0;
//
// Open the Database
@ -105,7 +106,7 @@ MainObject::MainObject(QObject *parent)
rda=new RDApplication("rdimport","rdimport",RDIMPORT_USAGE,this);
if(!rda->open(&err_msg)) {
fprintf(stderr,"rdimport: %s\n",(const char *)err_msg);
exit(1);
exit(RDApplication::ExitNoDb);
}
//
@ -113,7 +114,7 @@ MainObject::MainObject(QObject *parent)
//
if(rda->cmdSwitch()->keys()<2) {
Log(LOG_ERR,QString().sprintf("\n%s\n",RDIMPORT_USAGE));
exit(2);
exit(RDApplication::ExitInvalidOption);
}
for(unsigned i=0;i<rda->cmdSwitch()->keys()-2;i++) {
if(rda->cmdSwitch()->key(i)=="--verbose") {
@ -132,11 +133,11 @@ MainObject::MainObject(QObject *parent)
import_cart_number=rda->cmdSwitch()->value(i).toUInt(&ok);
if((!ok)||(import_cart_number<1)||(import_cart_number>999999)) {
Log(LOG_ERR,QString("rdimport: invalid cart number\n"));
exit(2);
exit(RDApplication::ExitInvalidOption);
}
if(import_use_cartchunk_cutid) {
Log(LOG_ERR,QString("rdimport: '--to-cart' and '--use-cartchunk-cutid' are mutually exclusive\n"));
exit(2);
exit(RDApplication::ExitInvalidOption);
}
import_single_cart=true;
rda->cmdSwitch()->setProcessed(i,true);
@ -144,7 +145,7 @@ MainObject::MainObject(QObject *parent)
if(rda->cmdSwitch()->key(i)=="--use-cartchunk-cutid") {
if(import_cart_number!=0) {
Log(LOG_ERR,QString("rdimport: '--to-cart' and '--use-cartchunk-cutid' are mutually exclusive\n"));
exit(2);
exit(RDApplication::ExitInvalidOption);
}
import_use_cartchunk_cutid=true;
rda->cmdSwitch()->setProcessed(i,true);
@ -153,7 +154,7 @@ MainObject::MainObject(QObject *parent)
import_cart_number_offset=rda->cmdSwitch()->value(i).toInt(&ok);
if(!ok) {
Log(LOG_ERR,QString("rdimport: invalid --cart-number-offset\n"));
exit(2);
exit(RDApplication::ExitInvalidOption);
}
rda->cmdSwitch()->setProcessed(i,true);
}
@ -173,7 +174,7 @@ MainObject::MainObject(QObject *parent)
import_startdate_offset=rda->cmdSwitch()->value(i).toInt(&ok);
if(!ok) {
Log(LOG_ERR,QString("rdimport: invalid startdate-offset\n"));
exit(2);
exit(RDApplication::ExitInvalidOption);
}
rda->cmdSwitch()->setProcessed(i,true);
}
@ -181,7 +182,7 @@ MainObject::MainObject(QObject *parent)
import_enddate_offset=rda->cmdSwitch()->value(i).toInt(&ok);
if(!ok) {
Log(LOG_ERR,QString("rdimport: invalid enddate-offset\n"));
exit(2);
exit(RDApplication::ExitInvalidOption);
}
rda->cmdSwitch()->setProcessed(i,true);
}
@ -193,42 +194,42 @@ MainObject::MainObject(QObject *parent)
QStringList f0=rda->cmdSwitch()->value(i).split(",");
if(f0.size()!=2) {
Log(LOG_ERR,QString("rdimport: invalid argument to --set-datetimes\n"));
exit(2);
exit(RDApplication::ExitInvalidOption);
}
for(unsigned j=0;j<2;j++) {
if((f0[j].length()!=15)||(f0[j].mid(8,1)!="-")) {
Log(LOG_ERR,QString("rdimport: invalid argument to --set-datetimes\n"));
exit(2);
exit(RDApplication::ExitInvalidOption);
}
unsigned year=f0[j].left(4).toUInt(&ok);
if(!ok) {
Log(LOG_ERR,QString("rdimport: invalid year argument to --set-datetimes\n"));
exit(2);
exit(RDApplication::ExitInvalidOption);
}
unsigned month=f0[j].mid(4,2).toUInt(&ok);
if((!ok)||(month>12)) {
Log(LOG_ERR,QString("rdimport: invalid month argument to --set-datetimes\n"));
exit(2);
exit(RDApplication::ExitInvalidOption);
}
unsigned day=f0[j].mid(6,2).toUInt(&ok);
if((!ok)||(day>31)) {
Log(LOG_ERR,QString("rdimport: invalid day argument to --set-datetimes\n"));
exit(2);
exit(RDApplication::ExitInvalidOption);
}
unsigned hour=f0[j].mid(9,2).toUInt(&ok);
if((!ok)||(hour>23)) {
Log(LOG_ERR,QString("rdimport: invalid hour argument to --set-datetimes\n"));
exit(2);
exit(RDApplication::ExitInvalidOption);
}
unsigned min=f0[j].mid(11,2).toUInt(&ok);
if((!ok)||(min>59)) {
Log(LOG_ERR,QString("rdimport: invalid minute argument to --set-datetimes\n"));