esfilter: rewrite the ONCE rule

This commit is contained in:
Jaroslav Kysela 2014-06-16 17:57:32 +02:00
parent 163ec92059
commit 672f93dbfd
2 changed files with 16 additions and 18 deletions

View file

@ -83,7 +83,8 @@ The columns have the following functions:
<dd>Use this elementary stream.
<dt>ONCE
<dd>Use this elementary stream only once per selected language.
<dd>Use this elementary stream only once per service type.
The language is distinguished, too.
The first successfully compared rule wins.
<dt>EXCLUSIVE

View file

@ -475,26 +475,23 @@ filter:
case ESFA_IGNORE:
st->es_filter |= ESFM_IGNORE;
break;
case ESFA_ONCE:
TAILQ_FOREACH(st2, &t->s_components, es_link) {
if (st == st2)
continue;
if ((st2->es_filter & ESFM_USED) == 0)
continue;
if (st2->es_type != st->es_type)
continue;
if (esf->esf_language[0] != '\0' && strcmp(st2->es_lang, st->es_lang))
continue;
}
if (st2 != NULL) break;
/* fall through */
break;
case ESFA_USE:
service_build_filter_add(t, st, sta, &p);
break;
case ESFA_ONCE:
if (esf->esf_language[0] == '\0') {
service_build_filter_add(t, st, sta, &p);
} else {
int present = 0;
TAILQ_FOREACH(st2, &t->s_components, es_link) {
if ((st2->es_filter & ESFM_USED) == 0)
continue;
if (strcmp(st2->es_lang, st->es_lang) == 0) {
present = 1;
break;
}
}
if (!present)
service_build_filter_add(t, st, sta, &p);
}
break;
case ESFA_EXCLUSIVE:
break;
case ESFA_EMPTY: