server: Convert com_addatt() to lopsub.
[paraslash.git] / m4 / lls / server_cmd.suite.m4
index e5bdcedec25dd0fdb59deb6678b003112581c529..83041ddf79ec46a24c954125eba9bed6de053b13 100644 (file)
@@ -52,6 +52,77 @@ aux_info_prefix = Permissions:
                        Print what is being done.
                [/help]
 
+[subcommand addatt]
+       purpose = add new attribute(s)
+       non-opts-name = attribute...
+       aux_info = AFS_READ | AFS_WRITE
+       [description]
+               This adds new attributes to the attribute table. At most 64 attributes
+               may be defined.
+       [/description]
+
+[subcommand check]
+       purpose = run integrity checks on database tables
+       aux_info = AFS_READ
+       [description]
+               If no options are given, all checks are run.
+       [/description]
+       [option aft]
+               short_opt = a
+               summary = run audio file table checks
+               [help]
+                       Report stale paths and invalid image and lyrics ids of the audio
+                       file table.
+               [/help]
+       [option attribute]
+               short_opt = A
+               summary = check for invalid attributes
+               [help]
+                       Report audio files whose attribute bitmask is invalid, i.e., has a bit
+                       set which does not correspond to any attribute of the attribute table.
+               [/help]
+       [option mood]
+               short_opt = m
+               summary = check for invalid mood definitions
+               [help]
+                       Run syntax checks on all moods of the mood table.
+               [/help]
+       [option playlist]
+               short_opt = p
+               summary = find invalid paths in playlists
+               [help]
+                       Check all playlists for paths not contained in the audio file table.
+               [/help]
+
+[subcommand cpsi]
+       purpose = copy selected parts of the audio file selector info
+       non-opts-name = source pattern...
+       aux_info = AFS_READ | AFS_WRITE
+       [description]
+               If no option, or only --verbose is given, all fields of the audio
+               file selector info structure are copied to each row of the audio file
+               table whose path matches at least one of the given patterns. Otherwise,
+               only those fields which correspond to the given options are copied.
+       [/description]
+       [option attribute-bitmap]
+               short_opt = a
+               summary = copy the attribute bitmap
+       [option image-id]
+               short_opt = i
+               summary = copy the image id
+       [option lyrics-id]
+               short_opt = y
+               summary = copy the lyrics id
+       [option lastplayed]
+               short_opt = l
+               summary = copy the lastplayed timestamp
+       [option numplayed]
+               short_opt = n
+               summary = copy the numplayed counter
+       [option verbose]
+               short_opt = v
+               summary = enable verbose mode
+
 [subcommand ff]
        purpose = jump N seconds forward or backward
        synopsis = n[-]
@@ -87,6 +158,16 @@ aux_info_prefix = Permissions:
                to the server process has the same effect as running this command.
        [/description]
 
+[subcommand init]
+       purpose = initialize the database tables for the audio file selector
+       synopsis = [table_name...]
+       aux_info = AFS_READ | AFS_WRITE
+       [description]
+               When invoked without arguments, this command creates all
+               tables: audio_files, attributes, scores, moods, lyrics, images,
+               playlists. Otherwise only the given tables are created.
+       [/description]
+
 [subcommand jmp]
        purpose = reposition the current stream
        non-opts-name = n
@@ -97,6 +178,45 @@ aux_info_prefix = Permissions:
                n <= 100.
        [/description]
 
+[subcommand lsatt]
+       purpose = list attributes
+       aux_info = AFS_READ
+       [description]
+               Print the list of all defined attributes which match the given
+               pattern. If no pattern is given, the full list is printed.
+       [/description]
+
+       [option id-sort]
+               short_opt = i
+               summary = sort attributes by id
+               [help]
+                       The default is to sort alphabetically by name.
+
+                       Attributes are internally represented as an 64 bit array. The attribute
+                       id is the bit number in this array.
+               [/help]
+       [option long]
+               short_opt = l
+               summary = print long listing
+               [help]
+                       The long listing prints the attribute id in addition to the name of
+                       the attribute. The id is printed as a decimal number and is separated
+                       from the name by a tab character.
+               [/help]
+       [option reverse]
+               short_opt = r
+               summary = reverse sort order
+
+[subcommand mvatt]
+       purpose = rename an attribute
+       synopsis = source dest
+       aux_info = AFS_READ | AFS_WRITE
+       [description]
+               Rename the attribute given by the first argument to the destination
+               given by the second argument. It is an error if the destination
+               attribute exists.
+       [/description]
+
 [subcommand next]
        purpose = close the stream and start to stream the next audio file
        aux_info = VSS_READ | VSS_WRITE
@@ -135,6 +255,52 @@ aux_info_prefix = Permissions:
                Set the 'P' (playing) bit of the vss status flags.
        [/description]
 
+[subcommand rm]
+       purpose = remove rows from the audio file table
+       non-opts-name = pattern...
+       aux_info = AFS_READ | AFS_WRITE
+       [description]
+               Remove all rows of the audio file table which match any of the given
+               patterns. Note that this affects only the database table; the command
+               won't touch your audio files on disk.
+       [/description]
+       [option verbose]
+               short_opt = v
+               summary = print paths of deleted rows
+       [option force]
+               short_opt = f
+               summary = don't complain if nothing was removed
+       [option pathname-match]
+               short_opt = p
+               summary = modify matching behaviour
+               [help]
+                       Match a slash in the path only with a slash in pattern and not by an
+                       asterisk (*) or a question mark (?) metacharacter, nor by a bracket
+                       expression ([]) containing a slash (see fnmatch(3)).
+               [/help]
+
+[subcommand rmatt]
+       purpose = remove attribute(s)
+       non-opts-name = pattern...
+       aux_info = AFS_READ | AFS_WRITE
+       [description]
+               Remove all attributes which match any given pattern. All information
+               about the removed attributes in the audio file table is lost.
+       [/description]
+
+[subcommand select]
+       purpose = activate a mood or a playlist
+       non-opts-name = specifier/name
+       aux_info = AFS_READ | AFS_WRITE
+       [description]
+               The specifier is either 'm' or 'p' to indicate whether a playlist or
+               a mood should be activated. Example:
+
+                       select m/foo
+
+               activates the mood named 'foo'.
+       [/description]
+
 [subcommand sender]
        purpose = control paraslash senders
        synopsis = [sender cmd [arguments]]
@@ -154,6 +320,20 @@ aux_info_prefix = Permissions:
 
        [/description]
 
+[subcommand setatt]
+       purpose = set or unset attributes
+       synopsis = attribute{+|-}... pattern...
+       aux_info = AFS_READ | AFS_WRITE
+       [description]
+               Set ('+') or unset ('-') the given attributes for all audio files
+               matching the given pattern. Example:
+
+                       setatt rock+ punk+ pop- '*foo.mp3'
+
+               sets the 'rock' and the 'punk' attribute and unsets the 'pop' attribute
+               of all files ending with 'foo.mp3'.
+       [/description]
+
 [subcommand si]
        purpose = print server info
        aux_info = NO_PERMISSION_REQUIRED
@@ -207,6 +387,119 @@ aux_info_prefix = Permissions:
                necessary to send SIGKILL.
        [/description]
 
+[subcommand touch]
+       purpose = manipulate the afs information of audio files
+       non-opts-name = pattern...
+       aux_info = AFS_READ | AFS_WRITE
+       [description]
+               This command modifies the afs info structure of all rows of the audio
+               file table whose path matches at least one of the given patters.
+
+               If at least one option is given which takes a number as its argument,
+               only those fields of the afs info structure are updated which
+               correspond to the given options while all other fields stay unmodified.
+
+               If no such option is given, the lastplayed field is set to the current
+               time and the value of the numplayed field is increased by one while
+               all other fields are left unchanged. This mimics what happens when
+               the virtual streaming system selects the file for streaming.
+
+               If the file is admissible for the current mood (or contained in the
+               current playlist), its score is recomputed according to the changed
+               values.
+       [/description]
+       [option numplayed]
+               short_opt = n
+               summary = set the numplayed count manually
+               arg_type = uint32
+               arg_info = required_arg
+               typestr = num
+               [help]
+                       The numplayed count of an audio file is the number of times the file
+                       was selected for streaming. It is one of the inputs to the scoring
+                       function which determines the order in which admissible files are
+                       streamed.
+
+                       The virtual streaming system increases this number automatically each
+                       time it opens the file for streaming.
+               [/help]
+       [option lastplayed]
+               short_opt = l
+               summary = set the lastplayed time manually
+               arg_type = uint64
+               arg_info = required_arg
+               typestr = num
+               [help]
+                       The lastplayed time of an audio file is the time when the file was
+                       last opened for streaming.
+
+                       Like the numplayed count, it is an input for the scoring function
+                       and is updated automatically by the virtual streaming system.
+
+                       The argument must be a number of seconds since the epoch. Example:
+
+                               touch -l=$(date +%s) file
+
+                       sets the lastplayed time of 'file' to the current time.
+               [/help]
+       [option image-id]
+               short_opt = i
+               summary = set the image id
+               arg_type = uint32
+               arg_info = required_arg
+               typestr = num
+               [help]
+                       The afs info structure of each row of the audio file table contains
+                       a slot for the image id of the audio file that corresponds to the
+                       row. The image id stored in this slot refers to the key in the image
+                       table that identifies the blob.
+
+                       When a new audio file is added to the audio file table, its image
+                       id starts out as zero, indicating that there is no image associated
+                       with the file. Setting the image id to a non-zero number associates
+                       the file with a particular blob of the image table, for example the
+                       cover art of the album in jpg format.
+               [/help]
+       [option lyrics-id]
+               short_opt = y
+               summary = set the lyrics id
+               arg_type = uint32
+               arg_info = required_arg
+               typestr = num
+               [help]
+                       This option works just like --image-id, but sets the lyrics ID rather
+                       than the image id.
+               [/help]
+       [option amp]
+               short_opt = a
+               summary = set the amplification value (0-255)
+               arg_type = uint32
+               arg_info = required_arg
+               typestr = num
+               [help]
+                       The amplification value of an audio file is a number which is stored
+                       in the afs info structure.
+
+                       The value determines the scaling factor by which the amplitude of
+                       the decoded samples should be multiplied in order to normalize the
+                       volume. A value of zero means no amplification, 64 means the amplitude
+                       should be multiplied by a factor of two, 128 by three and so on.
+
+                       The amp filter of para_audiod amplifies the volume according to
+                       this value.
+               [/help]
+       [option verbose]
+               short_opt = v
+               summary = explain what is being done
+       [option pathname-match]
+               short_opt = p
+               summary = modify matching behaviour
+               [help]
+                       Match a slash in the path only with a slash in pattern and not by an
+                       asterisk (*) or a question mark (?) metacharacter, nor by a bracket
+                       expression ([]) containing a slash (see fnmatch(3)).
+               [/help]
+
 [subcommand version]
        purpose = print the git version string of para_server
        aux_info = NO_PERMISSION_REQUIRED