Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
mdhelp: create nice macro helpers to reduce C code
  • Loading branch information
perexg committed Apr 14, 2016
1 parent 874d441 commit 0310d28
Show file tree
Hide file tree
Showing 12 changed files with 39 additions and 85 deletions.
6 changes: 3 additions & 3 deletions src/access.c
Expand Up @@ -1309,7 +1309,7 @@ theme_get_ui_list ( void *p, const char *lang )
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",
Expand Down Expand Up @@ -1741,7 +1741,7 @@ passwd_entry_class_password2_set(void *o, const void *v)
return 0;
}

extern const char *tvh_doc_passwd_class[];
CLASS_DOC(passwd)

const idclass_t passwd_entry_class = {
.ic_class = "passwd",
Expand Down Expand Up @@ -1893,7 +1893,7 @@ ipblock_entry_class_prefix_get(void *o)
return &ret;
}

extern const char *tvh_doc_ipblocking_class[];
CLASS_DOC(ipblocking)

const idclass_t ipblock_entry_class = {
.ic_class = "ipblocking",
Expand Down
41 changes: 9 additions & 32 deletions src/config.c
Expand Up @@ -1968,35 +1968,12 @@ config_muxconfpath_notify ( void *o, const char *lang )
#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,
Expand Down Expand Up @@ -2293,7 +2270,7 @@ const idclass_t config_class = {
"(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,
},
Expand All @@ -2304,7 +2281,7 @@ const idclass_t config_class = {
.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,
Expand All @@ -2316,7 +2293,7 @@ const idclass_t config_class = {
.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,
Expand All @@ -2328,7 +2305,7 @@ const idclass_t config_class = {
.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,
Expand Down
2 changes: 1 addition & 1 deletion src/descrambler/caclient.c
Expand Up @@ -237,7 +237,7 @@ caclient_class_status_get(void *o)
return &ret;
}

extern const char *tvh_doc_caclient_class[];
CLASS_DOC(caclient)

const idclass_t caclient_class =
{
Expand Down
2 changes: 1 addition & 1 deletion src/dvr/dvr_autorec.c
Expand Up @@ -981,7 +981,7 @@ dvr_autorec_entry_class_owner_opts(void *o)
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",
Expand Down
12 changes: 3 additions & 9 deletions src/dvr/dvr_config.c
Expand Up @@ -791,14 +791,8 @@ dvr_config_class_pathname_set(void *o, const void *v)
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",
Expand Down Expand Up @@ -1133,7 +1127,7 @@ const idclass_t dvr_config_class = {
.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,
Expand Down
33 changes: 7 additions & 26 deletions src/dvr/dvr_db.c
Expand Up @@ -2812,34 +2812,15 @@ dvr_entry_class_content_type_list(void *o, const char *lang)
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,
Expand Down Expand Up @@ -2870,7 +2851,7 @@ const idclass_t dvr_entry_class = {
.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,
Expand Down Expand Up @@ -2898,7 +2879,7 @@ const idclass_t dvr_entry_class = {
.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,
Expand Down Expand Up @@ -3222,7 +3203,7 @@ const idclass_t dvr_entry_class = {
.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,
Expand Down
13 changes: 3 additions & 10 deletions src/dvr/dvr_timerec.c
Expand Up @@ -517,15 +517,8 @@ dvr_timerec_entry_class_owner_opts(void *o)
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",
Expand Down Expand Up @@ -557,7 +550,7 @@ const idclass_t dvr_timerec_entry_class = {
.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",
},
Expand Down
2 changes: 2 additions & 0 deletions src/idnode.h
Expand Up @@ -61,6 +61,8 @@ typedef struct property_group
*/
#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
Expand Down
2 changes: 1 addition & 1 deletion src/imagecache.c
Expand Up @@ -71,7 +71,7 @@ struct imagecache_config imagecache_conf = {

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,
Expand Down
2 changes: 1 addition & 1 deletion src/memoryinfo.c
Expand Up @@ -29,7 +29,7 @@ service_class_get_title ( idnode_t *self, const char *lang )
return ((memoryinfo_t *)self)->my_name;
}

extern const char *tvh_doc_memoryinfo_class[];
CLASS_DOC(memoryinfo)

const idclass_t memoryinfo_class = {
.ic_class = "memoryinfo",
Expand Down
7 changes: 7 additions & 0 deletions src/prop.h
Expand Up @@ -152,6 +152,13 @@ static inline int64_t prop_intsplit_from_str(const char *s, int64_t intsplit)
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__ */

/******************************************************************************
Expand Down
2 changes: 1 addition & 1 deletion src/satip/server.c
Expand Up @@ -566,7 +566,7 @@ static htsmsg_t *satip_server_class_muxcfg_list ( void *o, const char *lang )
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,
Expand Down

0 comments on commit 0310d28

Please sign in to comment.