- struct mood_item *item;
- int ret, match = 0;
- long score_arg_sum = 0, score = 0, item_score;
- struct afs_info afsi;
- struct afh_info afhi;
- char *path;
-
- if (!m)
- return -E_NO_MOOD;
- ret = get_afsi_of_row(aft_row, &afsi);
- if (ret< 0)
- return ret;
- ret = get_afhi_of_row(aft_row, &afhi);
- if (ret< 0)
- return ret;
- ret = get_audio_file_path_of_row(aft_row, &path);
- if (ret< 0)
- return ret;
- /* reject audio file if it matches any entry in the deny list */
- list_for_each_entry(item, &m->deny_list, mood_item_node) {
- ret = get_item_score(item, &afsi, &afhi, path, &item_score,
- &score_arg_sum);
- if (ret > 0) /* not admissible */
- return 0;
- score += item_score;
- }
- list_for_each_entry(item, &m->accept_list, mood_item_node) {
- ret = get_item_score(item, &afsi, &afhi, path, &item_score,
- &score_arg_sum);
- if (ret == 0)
- continue;
- match = 1;
- score += item_score;
- }
- /* reject if there is no matching entry in the accept list */
- if (!match && !list_empty(&m->accept_list))
- return 0;
- list_for_each_entry(item, &m->score_list, mood_item_node) {
- ret = get_item_score(item, &afsi, &afhi, path, &item_score,
- &score_arg_sum);
- score += item_score;
- }
- if (score_arg_sum)
- score /= score_arg_sum;
- *result = score;
- return 1;
-}
-
-static void cleanup_list_entry(struct mood_item *item)
-{
- if (item->method && item->method->cleanup)
- item->method->cleanup(item->parser_data);
- else
- free(item->parser_data);
- list_del(&item->mood_item_node);
- free(item);
-}
-
-static void destroy_mood(struct mood *m)
-{
- struct mood_item *tmp, *item;
-