]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
markdown: initial work, register all classes
authorJaroslav Kysela <perex@perex.cz>
Tue, 29 Mar 2016 12:53:31 +0000 (14:53 +0200)
committerJaroslav Kysela <perex@perex.cz>
Tue, 29 Mar 2016 13:32:02 +0000 (15:32 +0200)
44 files changed:
Makefile
src/access.c
src/bouquet.c
src/channels.c
src/config.c
src/descrambler/caclient.c
src/dvr/dvr_autorec.c
src/dvr/dvr_config.c
src/dvr/dvr_db.c
src/dvr/dvr_timerec.c
src/epggrab.c
src/epggrab/channel.c
src/epggrab/module.c
src/epggrab/private.h
src/esfilter.c
src/idnode.c
src/idnode.h
src/imagecache.c
src/input.c
src/input.h
src/input/mpegts.c
src/input/mpegts.h
src/input/mpegts/iptv/iptv.c
src/input/mpegts/iptv/iptv_private.h
src/input/mpegts/linuxdvb/linuxdvb_adapter.c
src/input/mpegts/linuxdvb/linuxdvb_frontend.c
src/input/mpegts/linuxdvb/linuxdvb_private.h
src/input/mpegts/mpegts_mux_sched.c
src/input/mpegts/mpegts_network.c
src/input/mpegts/mpegts_network_dvb.c
src/input/mpegts/satip/satip.c
src/input/mpegts/satip/satip_frontend.c
src/input/mpegts/satip/satip_private.h
src/input/mpegts/tvhdhomerun/tvhdhomerun.c
src/input/mpegts/tvhdhomerun/tvhdhomerun.h
src/main.c
src/profile.c
src/satip/server.c
src/service.c
src/service_mapper.c
src/timeshift.c
src/tvhlog.c
src/webui/webui.c
src/webui/webui.h

index cc0726897a260b1d340a196f58de510efbdc5313..655858b95ec076ee910de86e73174a213e4717a8 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -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 \
@@ -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 \
index 3899ad9c3af697340cf52be544e85931307a79af..24d100414cce1b2540b045742e294f5b413ae561 100644 (file)
@@ -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) {
index ac359fe797c01ae6c3b788b17661341010b124f2..36cece81f6cc945489eb6fb21367175029d24201 100644 (file)
@@ -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) {
index a29bcc2034477a67b87fcd57fa6a79cb94507479..4f2f068cd942defcdad809aff367c94f040c9603 100644 (file)
@@ -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();
index f130d9c74f755bc83afc0ea2288781b774c1eb39..518639c984fc76652bf7ca0269695b3372b3d87e 100644 (file)
@@ -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");
index 32f506cb66f11f16ddb4be9b6458df01ac9037c6..2610f076a0bbcbba8c9a0395df150e772001a526 100644 (file)
@@ -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) {
index 9af63ab849ddca8332b7b2e98cd5ef5a89e5acbe..b15fe0e068ac1d905924c70ef14cbc43f1d637dc 100644 (file)
@@ -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)
index 1050439ca992ff7813cfe0cd8bc803b81030d740..a7c526fb8c0e47c302b1f3ca750bd8fc85f5820d 100644 (file)
@@ -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) {
index 84b1397b12238e27f29b9bfcad5ea068ea2da88a..1980c24e82f87d243c4acbd08070e734651a077a 100644 (file)
@@ -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) {
index 7da367bd94eca7c96f9a1c8f07d7f996f8a6638d..8ecb966e45d971729a2c51c32972d829a8010ff5 100644 (file)
@@ -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)
index 38876c87e79a75ab2805be92a49cf5c42ec2469f..f957e3452c89d7d05f0fbbd7d43df67cba26c808 100644 (file)
@@ -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 */
index 0123787e79cc98606eb035c26bb454719a4fd57a..018c1105b35f6ad7fab565c31e12e05e5ee59ed6 100644 (file)
@@ -793,6 +793,7 @@ void
 epggrab_channel_init( void )
 {
   TAILQ_INIT(&epggrab_channel_entries);
+  idclass_register(&epggrab_channel_class);
 }
 
 void
index b32196d9eaf88fb6ec80f4ffb74001158c7ac993..d4af185c7aa28e974aa62092c3fea9c7e480407f 100644 (file)
@@ -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"),
@@ -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"),
@@ -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"),
@@ -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 */
@@ -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);
 
@@ -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 */
index 5221801e7d0487a1692ebb80529312bee26b3559..73edc624007193bb5949cc74cf85cc06647b493d 100644 (file)
@@ -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)
  * *************************************************************************/
index 2915dfe2a6bd3a21a6722ab95f19cf9ffa7526df..7be72ddf40657d41b962ee27fe6a7e04be0273cd 100644 (file)
@@ -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;
index c7b4fa2b1da6942b8ad72234a4c3daa157280195..53fc03f02f13d8b53d50fb71bac127896503302a 100644 (file)
@@ -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
 {
@@ -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);
 
@@ -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 *
@@ -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
  */
index f859fbb92c56cb2cba4af60621de0707fc14b3c3..13b4a2267f43d31eb564a7657291cf66757cb675 100644 (file)
@@ -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);
index acb94ca9cb0c489e54a5ea78941241aab77db1dd..cf9fff570e96b613060815596c1dac4b6063d149 100644 (file)
@@ -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);
index f93cdcaec9f1052d3acd8df3dc6912ef6173ff11..7774c34547012ffc55eda2582054601810b5cb8e 100644 (file)
@@ -37,6 +37,16 @@ const idclass_t tvh_input_instance_class =
   .ic_perm_def   = ACCESS_ADMIN
 };
 
+/*
+ *
+ */
+void
+tvh_hardware_init ( void )
+{
+  idclass_register(&tvh_input_class);
+  idclass_register(&tvh_input_instance_class);
+}
+
 /*
  * Create entry
  */
index 1ae6236dcd430b1f858ba94680aa2150725f9675..595980f98ce489372bed574a04a40b42316a3989 100644 (file)
@@ -116,6 +116,8 @@ struct tvh_hardware {
   LIST_ENTRY(tvh_hardware)     th_link;
 };
 
+void tvh_hardware_init(void);
+
 void *tvh_hardware_create0
   ( void *o, const idclass_t *idc, const char *uuid, htsmsg_t *conf );
 void tvh_hardware_delete ( tvh_hardware_t *th );
@@ -136,8 +138,6 @@ tvh_hardware_list_t tvh_hardware;
  * Methods
  */
 
-void input_init ( void );
-
 htsmsg_t * tvh_input_stream_create_msg ( tvh_input_stream_t *st );
 
 void tvh_input_stream_destroy ( tvh_input_stream_t *st );
index 95e77d9108b7a8e04cbdf4a381e0ada092f0bf37..3d76875932daa25a889af4ba7ffc39c26e1016d5 100644 (file)
@@ -26,7 +26,9 @@ mpegts_init ( int linuxdvb_mask, int nosatip, str_list_t *satip_client,
   /* Register classes (avoid API 400 errors due to not yet defined) */
   idclass_register(&mpegts_network_class);
   idclass_register(&mpegts_mux_class);
+  idclass_register(&mpegts_mux_instance_class);
   idclass_register(&mpegts_service_class);
+  idclass_register(&mpegts_service_raw_class);
 
   /* FastScan init */
   dvb_fastscan_init();
index 0e37a2386498b72a953d866fd028a08ba63e4df6..f6426f62a66d97b78e914f6940e68c03caaae7de 100644 (file)
@@ -64,7 +64,9 @@ typedef TAILQ_HEAD(mpegts_table_feed_queue, mpegts_table_feed)
 /* Classes */
 extern const idclass_t mpegts_network_class;
 extern const idclass_t mpegts_mux_class;
+extern const idclass_t mpegts_mux_instance_class;
 extern const idclass_t mpegts_service_class;
+extern const idclass_t mpegts_service_raw_class;
 extern const idclass_t mpegts_input_class;
 
 /* **************************************************************************
index 19182c332375e61a9b0accbc2b7a3c03459d0d9f..4663769924173d2a3134b5bdce33ef2e47602db4 100644 (file)
@@ -982,6 +982,9 @@ iptv_network_init ( void )
   htsmsg_t *c, *e;
   htsmsg_field_t *f;
 
+  /* Register muxes */
+  idclass_register(&iptv_mux_class);
+
   /* Register builders */
   mpegts_network_register_builder(&iptv_network_class,
                                   iptv_network_builder);
index f0d96edf99e0d25522b946b137040ecfa92a0144..d2c5a61c8c505b5fe70bf763410e6ecdf503a304 100644 (file)
@@ -174,6 +174,7 @@ iptv_service_t *iptv_service_create0
 
 extern const idclass_t iptv_network_class;
 extern const idclass_t iptv_auto_network_class;
+extern const idclass_t iptv_mux_class;
 
 extern iptv_input_t   *iptv_input;
 extern iptv_network_t *iptv_network;
index e55297b59044673f374d08d077bd4446db509f4a..409618ad3366263894c1021e201592dae55be65f 100644 (file)
@@ -597,6 +597,39 @@ linuxdvb_adapter_init ( void )
 {
   force_dvbs = getenv("TVHEADEND_DEBUG_FORCE_DVBS") != NULL;
 
+  idclass_register(&linuxdvb_adapter_class);
+
+  idclass_register(&linuxdvb_frontend_dvbt_class);
+  idclass_register(&linuxdvb_frontend_dvbs_class);
+  idclass_register(&linuxdvb_frontend_dvbs_slave_class);
+  idclass_register(&linuxdvb_frontend_dvbc_class);
+  idclass_register(&linuxdvb_frontend_atsc_t_class);
+  idclass_register(&linuxdvb_frontend_atsc_c_class);
+  idclass_register(&linuxdvb_frontend_isdb_t_class);
+  idclass_register(&linuxdvb_frontend_isdb_c_class);
+  idclass_register(&linuxdvb_frontend_isdb_s_class);
+  idclass_register(&linuxdvb_frontend_dab_class);
+
+  idclass_register(&linuxdvb_lnb_class);
+  idclass_register(&linuxdvb_rotor_class);
+  idclass_register(&linuxdvb_rotor_gotox_class);
+  idclass_register(&linuxdvb_rotor_usals_class);
+  idclass_register(&linuxdvb_en50494_class);
+  idclass_register(&linuxdvb_switch_class);
+  idclass_register(&linuxdvb_diseqc_class);
+
+  idclass_register(&linuxdvb_satconf_class);
+  idclass_register(&linuxdvb_satconf_lnbonly_class);
+  idclass_register(&linuxdvb_satconf_2port_class);
+  idclass_register(&linuxdvb_satconf_4port_class);
+  idclass_register(&linuxdvb_satconf_en50494_class);
+  idclass_register(&linuxdvb_satconf_advanced_class);
+  idclass_register(&linuxdvb_satconf_ele_class);
+
+#if ENABLE_LINUXDVB_CA
+  idclass_register(&linuxdvb_ca_class);
+#endif
+
   /* Install monitor on /dev */
   (void)fsmonitor_add("/dev", &devmon);
 
index eebc25d1ff8957c536fe346f1e059313eb60d94d..18b1b6c4a2c73b27c6b5ee9db286ab7c4d304e9e 100644 (file)
@@ -298,7 +298,7 @@ const idclass_t linuxdvb_frontend_dvbs_class =
 const idclass_t linuxdvb_frontend_dvbs_slave_class =
 {
   .ic_super      = &linuxdvb_frontend_class,
-  .ic_class      = "linuxdvb_frontend_dvbs",
+  .ic_class      = "linuxdvb_frontend_dvbs_slave",
   .ic_caption    = N_("Linux DVB-S slave frontend"),
   .ic_properties = (const property_t[]){
     {
index 276b3f964c9cc5af29f214b026f02cb45244d93a..d9d1e37c80649482f093c746aad39bd03f3f876b 100644 (file)
@@ -68,8 +68,6 @@ typedef TAILQ_HEAD(linuxdvb_satconf_ele_list,linuxdvb_satconf_ele) linuxdvb_satc
 typedef TAILQ_HEAD(linuxdvb_ca_capmt_queue,linuxdvb_ca_capmt) linuxdvb_ca_capmt_queue_t;
 #endif
 
-extern const idclass_t linuxdvb_adapter_class;
-
 struct linuxdvb_adapter
 {
   tvh_hardware_t;
@@ -345,6 +343,38 @@ struct linuxdvb_en50494
   uint32_t  le_tune_freq; /* the real frequency to tune to */
 };
 
+/*
+ * Classes
+ */
+
+extern const idclass_t linuxdvb_adapter_class;
+extern const idclass_t linuxdvb_frontend_dvbt_class;
+extern const idclass_t linuxdvb_frontend_dvbs_class;
+extern const idclass_t linuxdvb_frontend_dvbs_slave_class;
+extern const idclass_t linuxdvb_frontend_dvbc_class;
+extern const idclass_t linuxdvb_frontend_atsc_t_class;
+extern const idclass_t linuxdvb_frontend_atsc_c_class;
+extern const idclass_t linuxdvb_frontend_isdb_t_class;
+extern const idclass_t linuxdvb_frontend_isdb_c_class;
+extern const idclass_t linuxdvb_frontend_isdb_s_class;
+extern const idclass_t linuxdvb_frontend_dab_class;
+
+extern const idclass_t linuxdvb_lnb_class;
+extern const idclass_t linuxdvb_rotor_class;
+extern const idclass_t linuxdvb_rotor_gotox_class;
+extern const idclass_t linuxdvb_rotor_usals_class;
+extern const idclass_t linuxdvb_en50494_class;
+extern const idclass_t linuxdvb_switch_class;
+extern const idclass_t linuxdvb_diseqc_class;
+
+extern const idclass_t linuxdvb_satconf_class;
+extern const idclass_t linuxdvb_satconf_lnbonly_class;
+extern const idclass_t linuxdvb_satconf_2port_class;
+extern const idclass_t linuxdvb_satconf_4port_class;
+extern const idclass_t linuxdvb_satconf_en50494_class;
+extern const idclass_t linuxdvb_satconf_advanced_class;
+extern const idclass_t linuxdvb_satconf_ele_class;
+
 /*
  * Methods
  */
index 756ec9a63789f6c4ccb5f84b3250c2c3b67f4dea..e310e3f88dedf9baae69ad715bed10789e58941a 100644 (file)
@@ -332,6 +332,8 @@ mpegts_mux_sched_init ( void )
   htsmsg_t *c, *e;
   htsmsg_field_t *f;
 
+  idclass_register(&mpegts_mux_sched_class);
+
   /* Load settings */
   if ((c = hts_settings_load_r(1, "muxsched"))) {
     HTSMSG_FOREACH(f, c) {
index 299eca1e637f97074943f53b8cc7a6db38d547f1..6b556c39612b14d22a4316843dfa636ac8a516bd 100644 (file)
@@ -582,6 +582,7 @@ mpegts_network_register_builder
   mnb->idc   = idc;
   mnb->build = build;
   LIST_INSERT_HEAD(&mpegts_network_builders, mnb, link);
+  idclass_register(idc);
 }
 
 void
index 47fa558423ebaaff0fd4a0843e53c58f01c1330e..6aeef5531951007fb6851c2533c10d888cf6f04b 100644 (file)
@@ -823,7 +823,7 @@ dvb_network_builder
   return (mpegts_network_t*)dvb_network_create0(NULL, idc, conf);
 }
 
-static  const idclass_t* dvb_network_classes[] = {
+static const idclass_t * dvb_network_classes[] = {
   &dvb_network_dvbt_class,
   &dvb_network_dvbc_class,
   &dvb_network_dvbs_class,
@@ -833,7 +833,21 @@ static  const idclass_t* dvb_network_classes[] = {
   &dvb_network_isdb_c_class,
   &dvb_network_isdb_s_class,
 #if 0 /* TODO: write DAB stream parser */
-  &dvb_network_dab_class
+  &dvb_network_dab_class,
+#endif
+};
+
+static const idclass_t * dvb_mux_classes[] = {
+  &dvb_network_dvbt_class,
+  &dvb_network_dvbc_class,
+  &dvb_network_dvbs_class,
+  &dvb_network_atsc_t_class,
+  &dvb_network_atsc_c_class,
+  &dvb_network_isdb_t_class,
+  &dvb_network_isdb_c_class,
+  &dvb_network_isdb_s_class,
+#if 0 /* TODO: write DAB stream parser */
+  &dvb_network_dab_class,
 #endif
 };
 
@@ -847,6 +861,10 @@ void dvb_network_init ( void )
   /* Load list of mux charset global overrides */
   dvb_charset_init();
 
+  /* Register mux classes */
+  for (i = 0; i < ARRAY_SIZE(dvb_mux_classes); i++)
+    idclass_register(dvb_mux_classes[i]);
+
   /* Register class builders */
   for (i = 0; i < ARRAY_SIZE(dvb_network_classes); i++)
     mpegts_network_register_builder(dvb_network_classes[i],
index b90b994d6c4dc900736d5b5728457588792e8e8c..a9d19ebfabfe8025f7f9f7a0aa92bc4d06498d6e 100644 (file)
@@ -1273,6 +1273,17 @@ satip_device_discovery_start( void )
 
 void satip_init ( int nosatip, str_list_t *clients )
 {
+  idclass_register(&satip_device_class);
+
+  idclass_register(&satip_frontend_class);
+  idclass_register(&satip_frontend_dvbt_class);
+  idclass_register(&satip_frontend_dvbs_class);
+  idclass_register(&satip_frontend_dvbs_slave_class);
+  idclass_register(&satip_frontend_atsc_t_class);
+  idclass_register(&satip_frontend_atsc_c_class);
+
+  idclass_register(&satip_satconf_class);
+
   satip_enabled = !nosatip;
   TAILQ_INIT(&satip_discoveries);
   satip_static_clients = clients;
index dab617c941aced33e514955ef3802ea6cd6c83b1..c2e5da158d397bca53258f2073bdcd8be2fd9855 100644 (file)
@@ -357,7 +357,7 @@ const idclass_t satip_frontend_dvbs_class =
 const idclass_t satip_frontend_dvbs_slave_class =
 {
   .ic_super      = &satip_frontend_class,
-  .ic_class      = "satip_frontend_dvbs",
+  .ic_class      = "satip_frontend_dvbs_slave",
   .ic_caption    = N_("SAT>IP DVB-S slave frontend"),
   .ic_properties = (const property_t[]){
     {
index 6802076bc3222d60b426951cb4818ff0a7071b1b..dd58c9d79f5f605aa21ea9dec253b9c69e6b22d8 100644 (file)
@@ -195,6 +195,19 @@ struct satip_satconf
   idnode_set_t              *sfc_networks;
 };
 
+/*
+ * Classes
+ */
+extern const idclass_t satip_frontend_class;
+
+extern const idclass_t satip_frontend_dvbt_class;
+extern const idclass_t satip_frontend_dvbs_class;
+extern const idclass_t satip_frontend_dvbs_slave_class;
+extern const idclass_t satip_frontend_atsc_t_class;
+extern const idclass_t satip_frontend_atsc_c_class;
+
+extern const idclass_t satip_satconf_class;
+
 /*
  * Methods
  */
index 153e2ecbf9af86d97d13202b881c01d84a8cddbc..48b946ac4f9c91950f3ee857387fbe1d36bf051c 100644 (file)
@@ -399,6 +399,11 @@ void tvhdhomerun_init ( void )
     hdhomerun_debug_set_filename(hdhomerun_debug_obj, s);
     hdhomerun_debug_enable(hdhomerun_debug_obj);
   }
+  idclass_register(&tvhdhomerun_device_class);
+  idclass_register(&tvhdhomerun_frontend_dvbt_class);
+  idclass_register(&tvhdhomerun_frontend_dvbc_class);
+  idclass_register(&tvhdhomerun_frontend_atsc_t_class);
+  idclass_register(&tvhdhomerun_frontend_atsc_c_class);
   TAILQ_INIT(&tvhdhomerun_discoveries);
   pthread_mutex_init(&tvhdhomerun_discovery_lock, NULL);
   tvh_cond_init(&tvhdhomerun_discovery_cond);
index 4aed37b62678df4dd9738c2e351e3f4bc51f1406..bbec1bcfc991808615f5d5a31e8ca5a2707fd5b8 100644 (file)
 #ifndef __TVH_tvhdhomerun_H__
 #define __TVH_tvhdhomerun_H__
 
+extern const idclass_t tvhdhomerun_device_class;
+extern const idclass_t tvhdhomerun_frontend_dvbt_class;
+extern const idclass_t tvhdhomerun_frontend_dvbc_class;
+extern const idclass_t tvhdhomerun_frontend_atsc_t_class;
+extern const idclass_t tvhdhomerun_frontend_atsc_c_class;
+
 void tvhdhomerun_init( void );
 void tvhdhomerun_done( void );
 
index 5164a717eb328131373bfbfc0edac0b0d1b341e2..4d1e3c71e7b7310b99ce4cff326b29735c2ca7a4 100644 (file)
@@ -1134,6 +1134,7 @@ main(int argc, char **argv)
   config_init(opt_nobackup == 0);
 
   /* Memoryinfo */
+  idclass_register(&memoryinfo_class);
   memoryinfo_register(&tasklet_memoryinfo);
 #if ENABLE_SLOW_MEMORYINFO
   memoryinfo_register(&htsmsg_memoryinfo);
@@ -1152,6 +1153,8 @@ main(int argc, char **argv)
   tvhthread_create(&mtimer_tick_tid, NULL, mtimer_tick_thread, NULL, "mtick");
   tvhthread_create(&tasklet_tid, NULL, tasklet_thread, NULL, "tasklet");
 
+  tvh_hardware_init();
+
   dbus_server_init(opt_dbus, opt_dbus_session);
 
   intlconv_init();
index afbcbc275cc5e87849bf85c74f5fe6e901388e2b..f3886b4e97da79bf9193a4828f485ff213513f56 100644 (file)
@@ -49,6 +49,7 @@ void
 profile_register(const idclass_t *clazz, profile_builder_t builder)
 {
   profile_build_t *pb = calloc(1, sizeof(*pb)), *pb2;
+  idclass_register(clazz);
   pb->clazz = clazz;
   pb->build = builder;
   pb2 = LIST_FIRST(&profile_builders);
index 090ce4a16f3df4680594e537794bd9ca3f1ffa3b..a70c267c8f1761b23c9d87288bdc1c9d5b595325 100644 (file)
@@ -779,6 +779,8 @@ void satip_server_init(int rtsp_port)
   int descramble, rewrite_pmt, muxcnf;
   char *nat_ip;
 
+  idclass_register(&satip_server_class);
+
   http_server_ip = NULL;
   satip_server_bootid = time(NULL);
   satip_server_conf.satip_deviceid = 1;
index f8557a2d47f02c25971b8b3a37868b6bf87c03c1..e53a81af41933bbd368d44d1930ca4b640195be2 100644 (file)
@@ -1526,6 +1526,8 @@ service_init(void)
   TAILQ_INIT(&service_all);
   TAILQ_INIT(&service_raw_all);
   TAILQ_INIT(&service_raw_remove);
+  idclass_register(&service_class);
+  idclass_register(&service_raw_class);
   pthread_mutex_init(&pending_save_mutex, NULL);
   tvh_cond_init(&pending_save_cond);
   tvhthread_create(&service_saver_tid, NULL, service_saver, NULL, "service");
index d04fc53de4530d0267cc3a8cb15abdeae72235ce..72147f8201cb8d69602b7647f240c2c88cb934ac 100644 (file)
@@ -557,6 +557,7 @@ void service_mapper_init ( void )
   htsmsg_t *m;
 
   TAILQ_INIT(&service_mapper_queue);
+  idclass_register(&service_mapper_conf_class);
   tvh_cond_init(&service_mapper_cond);
   tvhthread_create(&service_mapper_tid, NULL, service_mapper_thread, NULL, "svcmap");
 
index 72387bd37b71c15fdc35b4b633db56cc45c5f371..0bf2b8e6004e56abcf184462eeef8cc5c66c458f 100644 (file)
@@ -83,6 +83,8 @@ void timeshift_init ( void )
   timeshift_conf.max_period       = 60;                      // Hr (60mins)
   timeshift_conf.max_size         = 10000 * (size_t)1048576; // 10G
 
+  idclass_register(&timeshift_conf_class);
+
   /* Load settings */
   if ((m = hts_settings_load("timeshift/config"))) {
     idnode_load(&timeshift_conf.idnode, m);
index c8d2b6cbce56efcdefc238c7bd58611b0690b700..7840976808720b8ccfd44782a201366e9b7aed16 100644 (file)
@@ -443,6 +443,7 @@ tvhlog_init ( int level, int options, const char *path )
 void
 tvhlog_start ( void )
 {
+  idclass_register(&tvhlog_conf_class);
   tvhthread_create(&tvhlog_tid, NULL, tvhlog_thread, NULL, "log");
 }
 
index c35bd2b384a583c07aa694c4e4273941f739d3fe..46d2aaa93366bb802f9a1ff198f9b3e2542ea26f 100644 (file)
@@ -1864,6 +1864,7 @@ webui_init(int xspf)
   http_path_add("/favicon.ico", NULL, favicon, ACCESS_WEB_INTERFACE);
   http_path_add("/playlist", NULL, page_http_playlist, ACCESS_ANONYMOUS);
   http_path_add("/xmltv", NULL, page_xmltv, ACCESS_ANONYMOUS);
+  http_path_add("/markdown", NULL, page_markdown, ACCESS_ANONYMOUS);
 
   http_path_add("/state", NULL, page_statedump, ACCESS_ADMIN);
 
index 2aae83501da838175dd1892166691afdcf34d5cc..fac1b973359edc30949a3b959e68bd2493661828 100644 (file)
@@ -35,6 +35,7 @@ const char* html_escape(char *dst, const char *src, size_t len);
 
 int page_static_file(http_connection_t *hc, const char *remain, void *opaque);
 int page_xmltv(http_connection_t *hc, const char *remain, void *opaque);
+int page_markdown(http_connection_t *hc, const char *remain, void *opaque);
 
 #if ENABLE_LINUXDVB
 void extjs_start_dvb(void);