return strtab2htsmsg_str(tab, 1, lang);
}
-extern const char *tvh_doc_access_entry_class[];
+CLASS_DOC(access_entry)
const idclass_t access_entry_class = {
.ic_class = "access",
return 0;
}
-extern const char *tvh_doc_passwd_class[];
+CLASS_DOC(passwd)
const idclass_t passwd_entry_class = {
.ic_class = "passwd",
return &ret;
}
-extern const char *tvh_doc_ipblocking_class[];
+CLASS_DOC(ipblocking)
const idclass_t ipblock_entry_class = {
.ic_class = "ipblocking",
#endif
}
-static char *
-config_channelicon_path_doc(const struct property *p, const char *lang)
-{
- extern const char *tvh_doc_config_channelicon_path_property[];
- return prop_md_doc(tvh_doc_config_channelicon_path_property, lang);
-}
-
-static char *
-config_channelname_scheme_doc(const struct property *p, const char *lang)
-{
- extern const char *tvh_doc_config_channelname_scheme_property[];
- return prop_md_doc(tvh_doc_config_channelname_scheme_property, lang);
-}
-
-static char *
-config_picon_path_doc(const struct property *p, const char *lang)
-{
- extern const char *tvh_doc_config_picon_path_property[];
- return prop_md_doc(tvh_doc_config_picon_path_property, lang);
-}
-
-static char *
-config_picon_servicetype_doc(const struct property *p, const char *lang)
-{
- extern const char *tvh_doc_config_picon_servicetype_property[];
- return prop_md_doc(tvh_doc_config_picon_servicetype_property, lang);
-}
-extern const char *tvh_doc_config_class[];
+CLASS_DOC(config)
+PROP_DOC(config_channelicon_path)
+PROP_DOC(config_channelname_scheme)
+PROP_DOC(config_picon_path)
+PROP_DOC(config_picon_servicetype)
const idclass_t config_class = {
.ic_snode = &config.idnode,
"(file://) or remote (http://) image. "
"See Help for more infomation."),
.off = offsetof(config_t, chicon_path),
- .doc = config_channelicon_path_doc,
+ .doc = prop_doc_config_channelicon_path,
.opts = PO_ADVANCED,
.group = 6,
},
.desc = N_("Scheme to generate the the channel icon names "
"(all lower-case, service name picons etc.)."),
.list = config_class_chiconscheme_list,
- .doc = config_channelname_scheme_doc,
+ .doc = prop_doc_config_channelname_scheme,
.off = offsetof(config_t, chicon_scheme),
.opts = PO_ADVANCED,
.group = 6,
.desc = N_("Path to a directory (folder) containing your picon "
"collection. See Help for more detailed "
"information."),
- .doc = config_picon_path_doc,
+ .doc = prop_doc_config_picon_path,
.off = offsetof(config_t, picon_path),
.opts = PO_ADVANCED,
.group = 6,
.desc = N_("Select scheme to generate the picon names "
"(standard, force service type to 1)"),
.list = config_class_piconscheme_list,
- .doc = config_picon_servicetype_doc,
+ .doc = prop_doc_config_picon_servicetype,
.off = offsetof(config_t, picon_scheme),
.opts = PO_ADVANCED,
.group = 6,
return &ret;
}
-extern const char *tvh_doc_caclient_class[];
+CLASS_DOC(caclient)
const idclass_t caclient_class =
{
return PO_RDONLY | PO_ADVANCED;
}
-extern const char *tvh_doc_dvrautorec_class[];
+CLASS_DOC(dvrautorec)
const idclass_t dvr_autorec_entry_class = {
.ic_class = "dvrautorec",
return 0;
}
-static char *
-dvr_config_prop_pathname_doc(const struct property *p, const char *lang)
-{
- extern const char *tvh_doc_postprocessor_property[];
- return prop_md_doc(tvh_doc_postprocessor_property, lang);
-}
-
-extern const char *tvh_doc_dvrconfig_class[];
+CLASS_DOC(dvrconfig)
+PROP_DOC(postprocessor)
const idclass_t dvr_config_class = {
.ic_class = "dvrconfig",
.desc = N_("The string allows you to manually specify the "
"full path generation using predefined "
"modifiers. See Help for full details."),
- .doc = dvr_config_prop_pathname_doc,
+ .doc = prop_doc_postprocessor,
.set = dvr_config_class_pathname_set,
.off = offsetof(dvr_config_t, dvr_pathname),
.opts = PO_EXPERT,
return m;
}
-static char *
-dvr_entry_prop_status_doc(const struct property *p, const char *lang)
-{
- extern const char *tvh_doc_dvr_status_property[];
- return prop_md_doc(tvh_doc_dvr_status_property, lang);
-}
-
-static char *
-dvr_entry_prop_start_extra_doc(const struct property *p, const char *lang)
-{
- extern const char *tvh_doc_dvr_start_extra_property[];
- return prop_md_doc(tvh_doc_dvr_start_extra_property, lang);
-}
-
-static char *
-dvr_entry_prop_dvr_stop_extra_doc(const struct property *p, const char *lang)
-{
- extern const char *tvh_doc_dvr_stop_extra_property[];
- return prop_md_doc(tvh_doc_dvr_stop_extra_property, lang);
-}
-
-extern const char *tvh_doc_dvrentry_class[];
+CLASS_DOC(dvrentry)
+PROP_DOC(dvr_status)
+PROP_DOC(dvr_start_extra)
+PROP_DOC(dvr_stop_extra)
const idclass_t dvr_entry_class = {
.ic_class = "dvrentry",
.ic_caption = N_("DVR Entries"),
.ic_event = "dvrentry",
- /*.ic_doc = tvh_doc_dvrentry_class,*/
.ic_doc = tvh_doc_dvrentry_class,
.ic_changed = dvr_entry_class_changed,
.ic_save = dvr_entry_class_save,
.name = N_("Pre-recording padding"),
.desc = N_("Start recording earlier than the "
"EPG/timer-defined start time by x minutes."),
- .doc = dvr_entry_prop_start_extra_doc,
+ .doc = prop_doc_dvr_start_extra,
.off = offsetof(dvr_entry_t, de_start_extra),
.set = dvr_entry_class_start_extra_set,
.list = dvr_entry_class_extra_list,
.name = N_("Post-recording padding"),
.desc = N_("Continue recording for x minutes after scheduled "
"stop time."),
- .doc = dvr_entry_prop_dvr_stop_extra_doc,
+ .doc = prop_doc_dvr_stop_extra,
.off = offsetof(dvr_entry_t, de_stop_extra),
.list = dvr_entry_class_extra_list,
.opts = PO_SORTKEY | PO_ADVANCED | PO_DOC_NLIST,
.type = PT_STR,
.id = "status",
.name = N_("Status"),
- .doc = dvr_entry_prop_status_doc,
+ .doc = prop_doc_dvr_status,
.desc = N_("The recording/entry status."),
.get = dvr_entry_class_status_get,
.opts = PO_RDONLY | PO_NOSAVE | PO_LOCALE,
return PO_RDONLY | PO_ADVANCED;
}
-static char *
-dvr_timerec_prop_titleformat_doc(const struct property *p, const char *lang)
-{
- extern const char *tvh_doc_dvr_timerec_title_format_property[];
- return prop_md_doc(tvh_doc_dvr_timerec_title_format_property, lang);
-}
-
-
-extern const char *tvh_doc_dvrtimerec_class[];
+CLASS_DOC(dvrtimerec)
+PROP_DOC(dvr_timerec_title_format)
const idclass_t dvr_timerec_entry_class = {
.ic_class = "dvrtimerec",
.id = "title",
.name = N_("Title"),
.desc = N_("Title of the recording."),
- .doc = dvr_timerec_prop_titleformat_doc,
+ .doc = prop_doc_dvr_timerec_title_format,
.off = offsetof(dvr_timerec_entry_t, dte_title),
.def.s = "Time-%F_%R",
},
*/
#define IDCLASS_ALWAYS_SAVE (1<<0) ///< Always call the save callback
+#define CLASS_DOC(name) extern const char *tvh_doc_##name##_class[];
+
typedef struct idclass idclass_t;
struct idclass {
const struct idclass *ic_super; ///< Parent class
static htsmsg_t *imagecache_save(idnode_t *self, char *filename, size_t fsize);
-extern const char *tvh_doc_imagecache_class[];
+CLASS_DOC(imagecache)
const idclass_t imagecache_class = {
.ic_snode = (idnode_t *)&imagecache_conf,
return ((memoryinfo_t *)self)->my_name;
}
-extern const char *tvh_doc_memoryinfo_class[];
+CLASS_DOC(memoryinfo)
const idclass_t memoryinfo_class = {
.ic_class = "memoryinfo",
char *
prop_md_doc(const char **md, const char *lang);
+#define PROP_DOC(name) \
+extern const char *tvh_doc_##name##_property[]; \
+static char * \
+prop_doc_##name(const struct property *p, const char *lang) \
+{ return prop_md_doc(tvh_doc_##name##_property, lang); }
+
+
#endif /* __TVH_PROP_H__ */
/******************************************************************************
return strtab2htsmsg(tab, 1, lang);
}
-extern const char *tvh_doc_satip_server_class[];
+CLASS_DOC(satip_server)
const idclass_t satip_server_class = {
.ic_snode = (idnode_t *)&satip_server_conf,