/*
- * Copyright (C) 2007-2009 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2007-2011 Andre Noll <maan@systemlinux.org>
*
* Licensed under the GPL v2. For licencing details see COPYING.
*/
static struct mood *current_mood;
/**
- * Rough approximation to sqrt.
+ * Rough approximation to sqrt.
*
- * \param x Integer of which to calculate the sqrt.
+ * \param x Integer of which to calculate the sqrt.
*
- * \return An integer res with res * res <= x.
+ * \return An integer res with res * res <= x.
*/
-static uint64_t int_sqrt(uint64_t x)
+__a_const static uint64_t int_sqrt(uint64_t x)
{
uint64_t op, res, one = 1;
op = x;
void mood_check_callback(int fd, __a_unused const struct osl_object *query)
{
struct para_buffer pb = {
- .max_size = SHMMAX,
+ .max_size = shm_get_shmmax(),
.private_data = &fd,
.max_size_handler = pass_buffer_as_shm
};
*
* \sa mood_open(), mood_close().
*/
-int reload_current_mood(void)
+static int reload_current_mood(void)
{
int ret;
char *mood_name = NULL;
return ret;
}
+/**
+ * Notification callback for the moods table.
+ *
+ * \param event Type of the event just occurred.
+ * \param pb Unused.
+ * \param data Its type depends on the event.
+ *
+ * This function performs actions required due to the occurrence of the given
+ * event. Possible actions include reload of the current mood and update of the
+ * score of an audio file.
+ */
int moods_event_handler(enum afs_events event, __a_unused struct para_buffer *pb,
void *data)
{
+ int ret;
+
if (!current_mood)
return 0;
switch (event) {
case BLOB_ADD:
if (data == moods_table || data == playlists_table)
return 1; /* no reload necessary for these */
+ ret = clear_score_table();
+ if (ret < 0)
+ PARA_CRIT_LOG("clear score table returned %s\n",
+ para_strerror(-ret));
return reload_current_mood();
/* these also require reload of the score table */
case ATTRIBUTE_ADD:
return 1;
}
}
-