myMPD
Internal API documentation
Loading...
Searching...
No Matches
timer.c File Reference

myMPD timer API More...

#include "compile_time.h"
#include "src/mympd_api/timer.h"
#include "src/lib/config/state_files.h"
#include "src/lib/datetime.h"
#include "src/lib/filehandler.h"
#include "src/lib/json/json_print.h"
#include "src/lib/json/json_query.h"
#include "src/lib/json/json_rpc.h"
#include "src/lib/list/list.h"
#include "src/lib/list/sort.h"
#include "src/lib/log.h"
#include "src/lib/mem.h"
#include "src/lib/sds/sds_extras.h"
#include "src/lib/sds/sds_file.h"
#include "src/lib/timer.h"
#include "src/mympd_api/timer_handlers.h"
#include <errno.h>
#include <stdbool.h>
#include <string.h>
Include dependency graph for timer.c:

Functions

static void mympd_api_timer_free_node (struct t_list_node *node)
static struct t_list_nodeget_timer_from_fd (struct t_timer_list *l, int fd)
static sds print_timer_node (sds buffer, unsigned timer_id, struct t_timer_node *current)
void mympd_api_timer_timerlist_init (struct t_timer_list *l)
bool mympd_api_timer_check (int fd, struct t_timer_list *timer_list, struct t_mympd_state *mympd_state)
bool mympd_api_timer_save (struct t_partition_state *partition_state, struct t_timer_list *timer_list, int interval, unsigned timerid, struct t_timer_definition *timer_def, sds *error)
bool mympd_api_timer_replace (struct t_timer_list *l, int timeout, int interval, timer_handler handler, unsigned timer_id, struct t_timer_definition *definition)
bool mympd_api_timer_add_uniq (struct t_timer_list *l, int timeout, int interval, timer_handler handler, unsigned timer_id, struct t_timer_definition *definition)
bool mympd_api_timer_add (struct t_timer_list *l, int timeout, int interval, timer_handler handler, unsigned timer_id, struct t_timer_definition *definition)
bool mympd_api_timer_remove (struct t_timer_list *l, unsigned timer_id)
bool mympd_api_timer_remove_by_fd (struct t_timer_list *l, int fd)
int mympd_api_timer_remove_partition (struct t_timer_list *l, sds partition)
bool mympd_api_timer_toggle (struct t_timer_list *l, unsigned timer_id, sds *error)
void mympd_api_timer_timerlist_clear (struct t_timer_list *l)
void * mympd_api_timer_free_definition (struct t_timer_definition *timer_def)
struct t_timer_definitionmympd_api_timer_parse (sds str, const char *partition, struct t_json_parse_error *error)
int mympd_api_timer_calc_starttime (int start_hour, int start_minute, int interval)
sds mympd_api_timer_list (struct t_timer_list *timer_list, sds buffer, unsigned request_id, const char *partition)
sds mympd_api_timer_get (struct t_timer_list *timer_list, sds buffer, unsigned request_id, unsigned timer_id)
bool mympd_api_timer_file_read (struct t_timer_list *timer_list, sds workdir)
bool mympd_api_timer_file_save (struct t_timer_list *timer_list, sds workdir)

Detailed Description

myMPD timer API

Function Documentation

◆ get_timer_from_fd()

struct t_list_node * get_timer_from_fd ( struct t_timer_list * l,
int fd )
static

Gets the timer associated with the fd

Parameters
ltimer list
fdtimer fd
Returns
timer for the fd

◆ mympd_api_timer_add()

bool mympd_api_timer_add ( struct t_timer_list * l,
int timeout,
int interval,
timer_handler handler,
unsigned timer_id,
struct t_timer_definition * definition )

Adds a timer with given timer_id

Parameters
ltimer list
timeoutseconds when timer will run (offset from now)
intervalreschedule timer interval
handlertimer callback function
timer_idid of the timer
definitionpointer to timer definition (GUI) or NULL
Returns
true on success, else false

◆ mympd_api_timer_add_uniq()

bool mympd_api_timer_add_uniq ( struct t_timer_list * l,
int timeout,
int interval,
timer_handler handler,
unsigned timer_id,
struct t_timer_definition * definition )

Adds a timer with given timer_id only if timer_id is not already added

Parameters
ltimer list
timeoutseconds when timer will run (offset from now)
intervalreschedule timer interval
handlertimer callback function
timer_idid of the timer
definitionpointer to timer definition (GUI) or NULL
Returns
true on success, else false

◆ mympd_api_timer_calc_starttime()

int mympd_api_timer_calc_starttime ( int start_hour,
int start_minute,
int interval )

Calculates the offset from now for next start time for a timer

Parameters
start_hourstart hour
start_minutestart minute
intervalreschedule interval
Returns
unix timestamp of next start

◆ mympd_api_timer_check()

bool mympd_api_timer_check ( int fd,
struct t_timer_list * timer_list,
struct t_mympd_state * mympd_state )

Checks the timer event and executes the callback function

Parameters
fdfd with POLLIN event
timer_listtimer list
mympd_statePointer to mympd_state
Returns
true on success, else false

◆ mympd_api_timer_file_read()

bool mympd_api_timer_file_read ( struct t_timer_list * timer_list,
sds workdir )

Reads the timer file and populates the timer list

Parameters
timer_listtimer list
workdirworking directory
Returns
true on success, else false

◆ mympd_api_timer_file_save()

bool mympd_api_timer_file_save ( struct t_timer_list * timer_list,
sds workdir )

Saves the timer list to the timer file on disc

Parameters
timer_listtimer list
workdirworking directory
Returns
true on success, else false

◆ mympd_api_timer_free_definition()

void * mympd_api_timer_free_definition ( struct t_timer_definition * timer_def)

Frees a timer definition

Parameters
timer_defpointer to timer definition
Returns
NULL

◆ mympd_api_timer_free_node()

void mympd_api_timer_free_node ( struct t_list_node * node)
static

Private definitions

Private functions Frees a timer node

Parameters
nodetimer node to free

◆ mympd_api_timer_get()

sds mympd_api_timer_get ( struct t_timer_list * timer_list,
sds buffer,
unsigned request_id,
unsigned timer_id )

Gets the timer with the given id as an jsonrpc response

Parameters
timer_listtimer list
bufferalready allocated sds string to append the response
request_idjsonrpc request id
timer_idtimer id
Returns
pointer to buffer

◆ mympd_api_timer_list()

sds mympd_api_timer_list ( struct t_timer_list * timer_list,
sds buffer,
unsigned request_id,
const char * partition )

Gets the timer list as an jsonrpc response

Parameters
timer_listtimer list
bufferalready allocated sds string to append the response
request_idjsonrpc request id
partitionmpd partition
Returns
pointer to buffer

◆ mympd_api_timer_parse()

struct t_timer_definition * mympd_api_timer_parse ( sds str,
const char * partition,
struct t_json_parse_error * error )

Parses a json object string to a timer definition.

Parameters
strstring to parse
partitionmpd partition
errorpointer to sds string to populate an error string
Returns
pointer to timer_def or NULL on error

◆ mympd_api_timer_remove()

bool mympd_api_timer_remove ( struct t_timer_list * l,
unsigned timer_id )

Removes a timer with given id

Parameters
ltimer list
timer_idtimer id to remove
Returns
true on success, else false

◆ mympd_api_timer_remove_by_fd()

bool mympd_api_timer_remove_by_fd ( struct t_timer_list * l,
int fd )

Removes a timer with given fd

Parameters
lTimer list
fdTimer fd to remove
Returns
true on success, else false

◆ mympd_api_timer_remove_partition()

int mympd_api_timer_remove_partition ( struct t_timer_list * l,
sds partition )

Removes all user defines timers for specified partition

Parameters
lTimer list
partitionPartition name
Returns
Number of removed timers or -1 on error

◆ mympd_api_timer_replace()

bool mympd_api_timer_replace ( struct t_timer_list * l,
int timeout,
int interval,
timer_handler handler,
unsigned timer_id,
struct t_timer_definition * definition )

Replaces a timer with given timer_id

Parameters
ltimer list
timeoutseconds when timer will run
intervalreschedule timer interval
handlertimer callback function
timer_idid of the timer
definitionpointer to timer definition (GUI) or NULL
Returns
true on success, else false

◆ mympd_api_timer_save()

bool mympd_api_timer_save ( struct t_partition_state * partition_state,
struct t_timer_list * timer_list,
int interval,
unsigned timerid,
struct t_timer_definition * timer_def,
sds * error )

Saves a new or existing timer

Parameters
partition_statepointer to partition state
timer_listpointer to timer list
intervaltimer interval
timeridthe timerid
timer_defpointer to populated timer definition
errorpointer to already allocated sds string to append an error message
Returns
true on success, else false

◆ mympd_api_timer_timerlist_clear()

void mympd_api_timer_timerlist_clear ( struct t_timer_list * l)

Clears the timer list

Parameters
ltimer list

◆ mympd_api_timer_timerlist_init()

void mympd_api_timer_timerlist_init ( struct t_timer_list * l)

Public functions Inits the timer list

Parameters
lpointer to already allocated timer list

◆ mympd_api_timer_toggle()

bool mympd_api_timer_toggle ( struct t_timer_list * l,
unsigned timer_id,
sds * error )

Toggles the enabled state of a timer

Parameters
ltimer list
timer_idtimer id to toggle
errorpointer to already allocated sds string to append an error message
Returns
true on success, else false

◆ print_timer_node()

sds print_timer_node ( sds buffer,
unsigned timer_id,
struct t_timer_node * current )
static

Prints a timer node as a json object string

Parameters
bufferalready allocated sds string to append the response
timer_idthe timer id
currenttimer node to print
Returns
pointer to buffer