/**
* Assign scores according to a mood_method.
*
- * Each mood_method has its own mood_score_function. The first parameter passed
- * to that function is a pointer to a row of the audio file table. It
- * determines the audio file for which a score is to be assigned. The second
- * argument depends on the mood method this function is used for. It usually is
- * the argument given at the end of a mood line.
+ * Each mood_method has its own mood_score_function. The first three parameters
+ * passed to that function are informations about the audio file whose score is
+ * to be computed. The data argument depends on the mood method this function
+ * is used for. It usually is the argument given at the end of a mood line.
*
* Mood score functions must return values between -100 and +100 inclusively.
* Boolean score functions should always return either -100 or +100.
return res;
}
+static int mm_no_attributes_set_parser(const char *arg, __a_unused void **ignored)
+{
+ if (arg && *arg)
+ PARA_WARNING_LOG("ignored junk at eol: %s\n", arg);
+ return 1;
+}
+
+static int mm_no_attributes_set_score_function(__a_unused const char *path,
+ const struct afs_info *afsi,
+ __a_unused const struct audio_format_info *afhi,
+ __a_unused const void *data)
+{
+ if (!afsi->attributes)
+ return 100;
+ return -100;
+}
+
static int mm_played_rarely_score_function(__a_unused const char *path,
const struct afs_info *afsi,
__a_unused const struct audio_format_info *afhi,
static int mm_played_rarely_parser(const char *arg, __a_unused void **ignored)
{
- if (*arg)
+ if (arg && *arg)
PARA_WARNING_LOG("ignored junk at eol: %s\n", arg);
return 1;
}
return 1;
}
+#define DEFINE_MOOD_METHOD(_name) \
+.parser = mm_ ## _name ## _parser, \
+.score_function = mm_ ## _name ## _score_function, \
+.name = #_name
+
+#define DEFINE_MOOD_METHOD_WITH_CLEANUP(_name) \
+ DEFINE_MOOD_METHOD(_name), \
+ .cleanup = mm_ ## _name ## _cleanup
+
static const struct mood_method mood_methods[] = {
-{
- .parser = mm_played_rarely_parser,
- .score_function = mm_played_rarely_score_function,
- .name = "played_rarely"
-},
-{
- .parser = mm_is_set_parser,
- .score_function = mm_is_set_score_function,
- .name = "is_set"
-},
-{
- .parser = mm_name_like_parser,
- .score_function = mm_name_like_score_function,
- .cleanup = mm_name_like_cleanup,
- .name = "name_like"
-},
-{
- .parser = NULL
-}
+ {DEFINE_MOOD_METHOD(no_attributes_set)},
+ {DEFINE_MOOD_METHOD(played_rarely)},
+ {DEFINE_MOOD_METHOD(is_set)},
+ {DEFINE_MOOD_METHOD_WITH_CLEANUP(name_like)},
+ {.parser = NULL}
};
static void cleanup_list_entry(struct mood_item *item)