Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
markdown: initial work, register all classes
  • Loading branch information
perexg committed Mar 29, 2016
1 parent a004ac3 commit 1ec1600
Show file tree
Hide file tree
Showing 44 changed files with 302 additions and 47 deletions.
17 changes: 9 additions & 8 deletions Makefile
Expand Up @@ -293,13 +293,13 @@ SRCS-2 += \
src/parsers/parser_hevc.c \
src/parsers/parser_latm.c \
src/parsers/parser_avc.c \
src/parsers/parser_teletext.c \
src/parsers/parser_teletext.c

SRCS-2 += \
src/epggrab/module.c\
src/epggrab/channel.c\
src/epggrab/module/pyepg.c\
src/epggrab/module/xmltv.c\
src/epggrab/module.c \
src/epggrab/channel.c \
src/epggrab/module/pyepg.c \
src/epggrab/module/xmltv.c

SRCS-2 += \
src/plumbing/tsfix.c \
Expand All @@ -320,9 +320,10 @@ SRCS-2 += \
src/webui/extjs.c \
src/webui/simpleui.c \
src/webui/statedump.c \
src/webui/html.c\
src/webui/webui_api.c\
src/webui/xmltv.c
src/webui/html.c \
src/webui/webui_api.c \
src/webui/xmltv.c \
src/webui/doc_md.c

SRCS-2 += \
src/muxer.c \
Expand Down
4 changes: 4 additions & 0 deletions src/access.c
Expand Up @@ -2099,6 +2099,10 @@ access_init(int createdefault, int noacl)
TAILQ_INIT(&passwd_entries);
TAILQ_INIT(&ipblock_entries);

idclass_register(&access_entry_class);
idclass_register(&passwd_entry_class);
idclass_register(&ipblock_entry_class);

/* Load ipblock entries */
if ((c = hts_settings_load("ipblock")) != NULL) {
HTSMSG_FOREACH(f, c) {
Expand Down
1 change: 1 addition & 0 deletions src/bouquet.c
Expand Up @@ -1229,6 +1229,7 @@ bouquet_init(void)
bouquet_t *bq;

RB_INIT(&bouquets);
idclass_register(&bouquet_class);

/* Load */
if ((c = hts_settings_load("bouquet")) != NULL) {
Expand Down
2 changes: 2 additions & 0 deletions src/channels.c
Expand Up @@ -1103,6 +1103,8 @@ channel_init ( void )

RB_INIT(&channels);
memoryinfo_register(&channels_memoryinfo);
idclass_register(&channel_class);
idclass_register(&channel_tag_class);

/* Tags */
channel_tag_init();
Expand Down
2 changes: 2 additions & 0 deletions src/config.c
Expand Up @@ -1639,6 +1639,8 @@ config_boot ( const char *path, gid_t gid, uid_t uid )
config_scanfile_ok = 0;
config.theme_ui = strdup("blue");

idclass_register(&config_class);

/* Generate default */
if (!path) {
const char *homedir = getenv("HOME");
Expand Down
5 changes: 5 additions & 0 deletions src/descrambler/caclient.c
Expand Up @@ -352,13 +352,18 @@ caclient_init(void)
{
htsmsg_t *c, *e;
htsmsg_field_t *f;
const idclass_t **r;

pthread_mutex_init(&caclients_mutex, NULL);
TAILQ_INIT(&caclients);
idclass_register(&caclient_class);
#if ENABLE_TSDEBUG
tsdebugcw_init();
#endif

for (r = caclient_classes; *r; r++)
idclass_register(*r);

if (!(c = hts_settings_load("caclient")))
return;
HTSMSG_FOREACH(f, c) {
Expand Down
1 change: 1 addition & 0 deletions src/dvr/dvr_autorec.c
Expand Up @@ -1290,6 +1290,7 @@ dvr_autorec_init(void)
htsmsg_field_t *f;

TAILQ_INIT(&autorec_entries);
idclass_register(&dvr_autorec_entry_class);
if((l = hts_settings_load("dvr/autorec")) != NULL) {
HTSMSG_FOREACH(f, l) {
if((c = htsmsg_get_map_by_field(f)) == NULL)
Expand Down
1 change: 1 addition & 0 deletions src/dvr/dvr_config.c
Expand Up @@ -1277,6 +1277,7 @@ dvr_config_init(void)
/* Default settings */

LIST_INIT(&dvrconfigs);
idclass_register(&dvr_config_class);

if ((l = hts_settings_load("dvr/config")) != NULL) {
HTSMSG_FOREACH(f, l) {
Expand Down
1 change: 1 addition & 0 deletions src/dvr/dvr_db.c
Expand Up @@ -3514,6 +3514,7 @@ dvr_entry_init(void)
dvr_entry_t *de1, *de2;

dvr_in_init = 1;
idclass_register(&dvr_entry_class);
rere = htsmsg_create_map();
/* load config, but remove parent/child fields */
if((l = hts_settings_load("dvr/log")) != NULL) {
Expand Down
1 change: 1 addition & 0 deletions src/dvr/dvr_timerec.c
Expand Up @@ -681,6 +681,7 @@ dvr_timerec_init(void)
htsmsg_field_t *f;

TAILQ_INIT(&timerec_entries);
idclass_register(&dvr_timerec_entry_class);
if((l = hts_settings_load("dvr/timerec")) != NULL) {
HTSMSG_FOREACH(f, l) {
if((c = htsmsg_get_map_by_field(f)) == NULL)
Expand Down
6 changes: 6 additions & 0 deletions src/epggrab.c
Expand Up @@ -399,6 +399,12 @@ void epggrab_init ( void )
pthread_mutex_init(&epggrab_mutex, NULL);
pthread_cond_init(&epggrab_cond, NULL);

idclass_register(&epggrab_class);
idclass_register(&epggrab_mod_class);
idclass_register(&epggrab_mod_int_class);
idclass_register(&epggrab_mod_ext_class);
idclass_register(&epggrab_mod_ota_class);

epggrab_channel_init();

/* Initialise modules */
Expand Down
1 change: 1 addition & 0 deletions src/epggrab/channel.c
Expand Up @@ -793,6 +793,7 @@ void
epggrab_channel_init( void )
{
TAILQ_INIT(&epggrab_channel_entries);
idclass_register(&epggrab_channel_class);
}

void
Expand Down
12 changes: 6 additions & 6 deletions src/epggrab/module.c
Expand Up @@ -162,7 +162,7 @@ const idclass_t epggrab_mod_class = {
}
};

const idclass_t epggrab_class_mod_int = {
const idclass_t epggrab_mod_int_class = {
.ic_super = &epggrab_mod_class,
.ic_class = "epggrab_mod_int",
.ic_caption = N_("Internal EPG grabber"),
Expand All @@ -189,7 +189,7 @@ const idclass_t epggrab_class_mod_int = {
}
};

const idclass_t epggrab_class_mod_ext = {
const idclass_t epggrab_mod_ext_class = {
.ic_super = &epggrab_mod_class,
.ic_class = "epggrab_mod_ext",
.ic_caption = N_("External EPG grabber"),
Expand All @@ -207,7 +207,7 @@ const idclass_t epggrab_class_mod_ext = {
}
};

const idclass_t epggrab_class_mod_ota = {
const idclass_t epggrab_mod_ota_class = {
.ic_super = &epggrab_mod_class,
.ic_class = "epggrab_mod_ota",
.ic_caption = N_("Over-the-air EPG grabber"),
Expand Down Expand Up @@ -334,7 +334,7 @@ epggrab_module_int_t *epggrab_module_int_create

/* Pass through */
epggrab_module_create((epggrab_module_t*)skel,
cls ?: &epggrab_class_mod_int,
cls ?: &epggrab_mod_int_class,
id, saveid, name, priority);

/* Int data */
Expand Down Expand Up @@ -565,7 +565,7 @@ epggrab_module_ext_t *epggrab_module_ext_create
/* Pass through */
hts_settings_buildpath(path, sizeof(path), "epggrab/%s.sock", sockid);
epggrab_module_int_create((epggrab_module_int_t*)skel,
&epggrab_class_mod_ext,
&epggrab_mod_ext_class,
id, saveid, name, priority, path,
NULL, parse, trans);

Expand All @@ -591,7 +591,7 @@ epggrab_module_ota_t *epggrab_module_ota_create

/* Pass through */
epggrab_module_create((epggrab_module_t*)skel,
&epggrab_class_mod_ota,
&epggrab_mod_ota_class,
id, saveid, name, priority);

/* Setup */
Expand Down
9 changes: 9 additions & 0 deletions src/epggrab/private.h
Expand Up @@ -182,6 +182,15 @@ int xmltv_parse_accessibility
size_t freesat_huffman_decode
( char *dst, size_t* dstlen, const uint8_t *src, size_t srclen );

/* **************************************************************************
* Classes
* *************************************************************************/

extern const idclass_t epggrab_mod_class;
extern const idclass_t epggrab_mod_int_class;
extern const idclass_t epggrab_mod_ext_class;
extern const idclass_t epggrab_mod_ota_class;

/* **************************************************************************
* Module setup(s)
* *************************************************************************/
Expand Down
5 changes: 4 additions & 1 deletion src/esfilter.c
Expand Up @@ -1187,8 +1187,11 @@ esfilter_init(void)
htsmsg_field_t *f;
int i;

for (i = 0; i <= ESF_CLASS_LAST; i++)
for (i = 0; i <= ESF_CLASS_LAST; i++) {
TAILQ_INIT(&esfilters[i]);
if (esfilter_classes[i])
idclass_register(esfilter_classes[i]);
}

if (!(c = hts_settings_load("esfilter")))
return;
Expand Down
110 changes: 86 additions & 24 deletions src/idnode.c
Expand Up @@ -32,7 +32,7 @@
#include "access.h"

static const idnodes_rb_t * idnode_domain ( const idclass_t *idc );
static void idclass_root_register ( idnode_t *in );
static idnodes_rb_t * idclass_find_domain ( const idclass_t *idc );

typedef struct idclass_link
{
Expand Down Expand Up @@ -137,9 +137,11 @@ idnode_insert(idnode_t *in, const char *uuid, const idclass_t *class, int flags)
tvhtrace("idnode", "insert node %s", idnode_uuid_as_str(in, ubuf));

/* Register the class */
idclass_register(class); // Note: we never actually unregister
idclass_root_register(in);
assert(in->in_domain);
in->in_domain = idclass_find_domain(class);
if (in->in_domain == NULL) {
tvherror("idnode", "classs '%s' is not registered", class->ic_class);
abort();
}
c = RB_INSERT_SORTED(in->in_domain, in, in_domain_link, in_cmp);
assert(c == NULL);

Expand Down Expand Up @@ -1327,39 +1329,52 @@ idclass_get_property_groups (const idclass_t *idc, const char *lang)
return NULL;
}

void
idclass_register(const idclass_t *idc)
static idnodes_rb_t *
idclass_find_domain(const idclass_t *idc)
{
while (idc) {
SKEL_ALLOC(idclasses_skel);
idclasses_skel->idc = idc;
if (RB_INSERT_SORTED(&idclasses, idclasses_skel, link, ic_cmp))
break;
RB_INIT(&idclasses_skel->nodes); /* not used, but for sure */
SKEL_USED(idclasses_skel);
tvhtrace("idnode", "register class %s", idc->ic_class);
idc = idc->ic_super;
}
idclass_link_t *r;
idc = idnode_root_class(idc);
SKEL_ALLOC(idclasses_skel);
idclasses_skel->idc = idc;
r = RB_FIND(&idrootclasses, idclasses_skel, link, ic_cmp);
if (r)
return &r->nodes;
return NULL;
}

static void
idclass_root_register(idnode_t *in)
idclass_root_register(const idclass_t *idc)
{
const idclass_t *idc = in->in_class;
idclass_link_t *r;
idc = idnode_root_class(idc);
SKEL_ALLOC(idclasses_skel);
idclasses_skel->idc = idc;
r = RB_INSERT_SORTED(&idrootclasses, idclasses_skel, link, ic_cmp);
if (r) {
in->in_domain = &r->nodes;
return;
}
if (r) return;
RB_INIT(&idclasses_skel->nodes);
r = idclasses_skel;
SKEL_USED(idclasses_skel);
tvhtrace("idnode", "register root class %s", idc->ic_class);
in->in_domain = &r->nodes;
}

void
idclass_register(const idclass_t *idc)
{
const idclass_t *prev = NULL;
while (idc) {
SKEL_ALLOC(idclasses_skel);
idclasses_skel->idc = idc;
if (RB_INSERT_SORTED(&idclasses, idclasses_skel, link, ic_cmp)) {
prev = NULL;
break;
}
RB_INIT(&idclasses_skel->nodes); /* not used, but for sure */
SKEL_USED(idclasses_skel);
tvhtrace("idnode", "register class %s", idc->ic_class);
prev = idc;
idc = idc->ic_super;
}
if (prev)
idclass_root_register(prev);
}

const idclass_t *
Expand All @@ -1374,6 +1389,53 @@ idclass_find ( const char *class )
return t ? t->idc : NULL;
}

idclass_t const **
idclass_find_all(void)
{
idclass_link_t *l;
idclass_t const **ret;
int i = 0, count = 0;
RB_FOREACH(l, &idclasses, link)
count++;
if (count == 0)
return NULL;
ret = calloc(count + 1, sizeof(idclass_t *));
RB_FOREACH(l, &idclasses, link)
ret[i++] = l->idc;
ret[i] = NULL;
return ret;
}

idclass_t const **
idclass_find_children(const char *clazz)
{
const idclass_t *ic = idclass_find(clazz), *root;
idclass_link_t *l;
idclass_t const **ret;
int i, count;

if (ic == NULL)
return NULL;
root = idnode_root_class(ic);
if (root == NULL)
return NULL;
ret = NULL;
count = i = 0;
RB_FOREACH(l, &idclasses, link) {
if (root == idnode_root_class(l->idc)) {
if (i <= count) {
count += 50;
ret = realloc(ret, count * sizeof(const idclass_t *));
}
ret[i++] = ic;
}
}
if (i <= count)
ret = realloc(ret, (count + 1) * sizeof(const idclass_t *));
ret[i] = NULL;
return ret;
}

/*
* Just get the class definition
*/
Expand Down
2 changes: 2 additions & 0 deletions src/idnode.h
Expand Up @@ -221,6 +221,8 @@ void idnode_notify_title_changed (void *in, const char *lang);

void idclass_register ( const idclass_t *idc );
const idclass_t *idclass_find ( const char *name );
idclass_t const **idclass_find_all(void);
idclass_t const **idclass_find_children(const char *name);
const char *idclass_get_caption ( const idclass_t *idc, const char *lang );
htsmsg_t *idclass_serialize0 (const idclass_t *idc, htsmsg_t *list, int optmask, const char *lang);
htsmsg_t *idnode_serialize0 (idnode_t *self, htsmsg_t *list, int optmask, const char *lang);
Expand Down
2 changes: 2 additions & 0 deletions src/imagecache.c
Expand Up @@ -410,6 +410,8 @@ imagecache_init ( void )
imagecache_conf.ignore_sslcert = 0;
#endif

idclass_register(&imagecache_class);

/* Create threads */
#if ENABLE_IMAGECACHE
tvh_cond_init(&imagecache_cond);
Expand Down

0 comments on commit 1ec1600

Please sign in to comment.