--- src/pulsecore/core-scache.c | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/src/pulsecore/core-scache.c b/src/pulsecore/core-scache.c index 3e12b34..9e88b7b 100644 --- a/src/pulsecore/core-scache.c +++ b/src/pulsecore/core-scache.c @@ -79,6 +79,7 @@ static void free_entry(pa_scache_entry *e) { pa_namereg_unregister(e->core, e->name); pa_subscription_post(e->core, PA_SUBSCRIPTION_EVENT_SAMPLE_CACHE|PA_SUBSCRIPTION_EVENT_REMOVE, e->index); + pa_hook_fire(&e->core->hooks[PA_CORE_HOOK_SAMPLE_CACHE_REMOVED], e); pa_xfree(e->name); pa_xfree(e->filename); if (e->memchunk.memblock) @@ -88,7 +89,7 @@ static void free_entry(pa_scache_entry *e) { pa_xfree(e); } -static pa_scache_entry* scache_add_item(pa_core *c, const char *name) { +static pa_scache_entry* scache_add_item(pa_core *c, const char *name, bool *new_sample) { pa_scache_entry *e; pa_assert(c); @@ -104,6 +105,8 @@ static pa_scache_entry* scache_add_item(pa_core *c, const char *name) { pa_assert(e->core == c); pa_subscription_post(c, PA_SUBSCRIPTION_EVENT_SAMPLE_CACHE|PA_SUBSCRIPTION_EVENT_CHANGE, e->index); + if (new_sample) + *new_sample = false; } else { e = pa_xnew(pa_scache_entry, 1); @@ -119,6 +122,8 @@ static pa_scache_entry* scache_add_item(pa_core *c, const char *name) { pa_idxset_put(c->scache, e, &e->index); pa_subscription_post(c, PA_SUBSCRIPTION_EVENT_SAMPLE_CACHE|PA_SUBSCRIPTION_EVENT_NEW, e->index); + if (new_sample) + *new_sample = true; } e->last_used_time = 0; @@ -137,6 +142,15 @@ static pa_scache_entry* scache_add_item(pa_core *c, const char *name) { return e; } +static void scache_hook(pa_scache_entry *e, bool new_sample) { + pa_assert(e); + + if (new_sample) + pa_hook_fire(&e->core->hooks[PA_CORE_HOOK_SAMPLE_CACHE_NEW], e); + else + pa_hook_fire(&e->core->hooks[PA_CORE_HOOK_SAMPLE_CACHE_CHANGED], e); +} + int pa_scache_add_item( pa_core *c, const char *name, @@ -149,6 +163,7 @@ int pa_scache_add_item( pa_scache_entry *e; char st[PA_SAMPLE_SPEC_SNPRINT_MAX]; pa_channel_map tmap; + bool new_sample; pa_assert(c); pa_assert(name); @@ -163,7 +178,7 @@ int pa_scache_add_item( if (chunk && chunk->length > PA_SCACHE_ENTRY_SIZE_MAX) return -1; - if (!(e = scache_add_item(c, name))) + if (!(e = scache_add_item(c, name, &new_sample))) return -1; pa_sample_spec_init(&e->sample_spec); @@ -190,6 +205,8 @@ int pa_scache_add_item( if (idx) *idx = e->index; + scache_hook(e, new_sample); + pa_log_debug("Created sample \"%s\" (#%d), %lu bytes with sample spec %s", name, e->index, (unsigned long) e->memchunk.length, pa_sample_spec_snprint(st, sizeof(st), &e->sample_spec)); @@ -232,6 +249,7 @@ int pa_scache_add_file(pa_core *c, const char *name, const char *filename, uint3 int pa_scache_add_file_lazy(pa_core *c, const char *name, const char *filename, uint32_t *idx) { pa_scache_entry *e; + bool new_sample; #ifdef OS_IS_WIN32 char buf[MAX_PATH]; @@ -244,7 +262,7 @@ int pa_scache_add_file_lazy(pa_core *c, const char *name, const char *filename, pa_assert(name); pa_assert(filename); - if (!(e = scache_add_item(c, name))) + if (!(e = scache_add_item(c, name, &new_sample))) return -1; e->lazy = true; @@ -258,6 +276,8 @@ int pa_scache_add_file_lazy(pa_core *c, const char *name, const char *filename, if (idx) *idx = e->index; + scache_hook(e, new_sample); + return 0; } -- 1.9.1