static void _reading_status_notify(Signal signal, Read_Command *command);
static void dispose_read_command(Read_Command *command, Signal playing_reason, Signal non_playing_reason);
-// TODO(t.wozniak): simplify the function
// Retrieves first non-discardable command from the queue (if there is one)
// or the last command in the queue (if all are discardable).
//
//TODO: consider handling the case of discarding well-formed read command by subsequent malformed command
-static Read_Command *get_read_command_from_queue(Eina_List **command_queue_list)
+static Read_Command *get_read_command_from_queue(Eina_List **cmd_list)
{
- if (command_queue_list == NULL || *command_queue_list == NULL) return NULL;
+ if (cmd_list == NULL || *cmd_list == NULL)
+ return NULL;
+
+ Read_Command *result = NULL;
- Eina_List *command_queue = *command_queue_list;
- DEBUG("CLEAN UP THE QUEUE HEAD(%p) # of elements in queue:%d", command_queue, eina_list_count(command_queue));
+ while (eina_list_count(*cmd_list)) {
+ dispose_read_command(result, READING_SKIPPED, READING_SKIPPED);
+ result = (*cmd_list)->data;
+ *cmd_list = eina_list_remove(*cmd_list, result);
- Read_Command *command = NULL;
- while (eina_list_count(command_queue)) {
+ // command is not discardable
+ if (!can_be_discarded(result) && (result->context.text != NULL))
+ break;
- dispose_read_command(command, READING_SKIPPED, READING_SKIPPED);
- command = command_queue->data;
- DEBUG("GOT READ COMMAND:%p", command);
- *command_queue_list = eina_list_remove(command_queue, command);
- DEBUG("REMOVED COMMAND FROM QUEUE. NEW HEAD: %p", command_queue);
- Read_Command *next = *command_queue_list ? (*command_queue_list)->data : NULL;
- if ((!can_be_discarded(command) && (command->context.text != NULL)) || (next && next->delay_to_speak))
+ // next command have delay_to_speak
+ Read_Command *next = *cmd_list ? (*cmd_list)->data : NULL;
+ if (next && next->delay_to_speak)
break;
}
- return command;
+
+ return result;
}
static void purge_commands_from_queue(Eina_List **list_ptr, Eina_Bool only_discardables)