From: Jaroslav Kysela Date: Tue, 3 Nov 2015 16:08:48 +0000 (+0100) Subject: DVR: show what changed in dvr_entry_update X-Git-Tag: v4.2.1~1678 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=0cc616e843159c268c0378596db5393397a745f7;p=thirdparty%2Ftvheadend.git DVR: show what changed in dvr_entry_update --- diff --git a/src/dvr/dvr_db.c b/src/dvr/dvr_db.c index ca437f1ab..53031f8e3 100644 --- a/src/dvr/dvr_db.c +++ b/src/dvr/dvr_db.c @@ -1273,6 +1273,43 @@ dvr_timer_remove_files(void *aux) dvr_entry_retention_timer(de); } +/** + * + */ + +#define DVR_UPDATED_ENABLED (1<<0) +#define DVR_UPDATED_CHANNEL (1<<1) +#define DVR_UPDATED_STOP (1<<2) +#define DVR_UPDATED_STOP_EXTRA (1<<3) +#define DVR_UPDATED_START (1<<4) +#define DVR_UPDATED_START_EXTRA (1<<5) +#define DVR_UPDATED_TITLE (1<<6) +#define DVR_UPDATED_SUBTITLE (1<<7) +#define DVR_UPDATED_SUMMARY (1<<8) +#define DVR_UPDATED_DESCRIPTION (1<<9) +#define DVR_UPDATED_PRIO (1<<10) +#define DVR_UPDATED_GENRE (1<<11) +#define DVR_UPDATED_RETENTION (1<<12) +#define DVR_UPDATED_REMOVAL (1<<13) +#define DVR_UPDATED_EID (1<<14) +#define DVR_UPDATED_BROADCAST (1<<15) +#define DVR_UPDATED_EPISODE (1<<16) + +static char *dvr_updated_str(char *buf, size_t buflen, int flags) +{ + static const char *x = "ecoOsStumdpgrviBE"; + const char *p = x; + char *w = buf, *end = buf + buflen; + + for (p = x; *p && flags && w != end; p++, flags >>= 1) + if (flags & 1) + *w++ = *p; + if (w == end) + *(w - 1) = '\0'; + else + *w ='\0'; + return buf; +} /** * @@ -1291,7 +1328,7 @@ static dvr_entry_t *_dvr_entry_update enabled = !!enabled; if (de->de_enabled != enabled) { de->de_enabled = enabled; - save = 1; + save |= DVR_UPDATED_ENABLED; } } @@ -1303,12 +1340,12 @@ static dvr_entry_t *_dvr_entry_update stop = de->de_start; if (stop != de->de_stop) { de->de_stop = stop; - save = 1; + save |= DVR_UPDATED_STOP; } } if (stop_extra && (stop_extra != de->de_stop_extra)) { de->de_stop_extra = stop_extra; - save = 1; + save |= DVR_UPDATED_STOP_EXTRA; } goto dosave; } @@ -1316,7 +1353,7 @@ static dvr_entry_t *_dvr_entry_update /* Channel */ if (ch && (ch != de->de_channel)) { de->de_channel = ch; - save = 1; + save |= DVR_UPDATED_CHANNEL; } /* Start/Stop */ @@ -1326,31 +1363,31 @@ static dvr_entry_t *_dvr_entry_update } if (start && (start != de->de_start)) { de->de_start = start; - save = 1; + save |= DVR_UPDATED_START; } if (stop && (stop != de->de_stop)) { de->de_stop = stop; - save = 1; + save |= DVR_UPDATED_STOP; } if (start_extra && (start_extra != de->de_start_extra)) { de->de_start_extra = start_extra; - save = 1; + save |= DVR_UPDATED_START_EXTRA; } if (stop_extra && (stop_extra != de->de_stop_extra)) { de->de_stop_extra = stop_extra; - save = 1; + save |= DVR_UPDATED_STOP_EXTRA; } if (pri != DVR_PRIO_NOTSET && (pri != de->de_pri)) { de->de_pri = pri; - save = 1; + save |= DVR_UPDATED_PRIO; } if (retention && (retention != de->de_retention)) { de->de_retention = retention; - save = 1; + save |= DVR_UPDATED_RETENTION; } if (removal && (removal != de->de_removal)) { de->de_removal = removal; - save = 1; + save |= DVR_UPDATED_REMOVAL; } if (save) { updated = 1; @@ -1359,46 +1396,35 @@ static dvr_entry_t *_dvr_entry_update /* Title */ if (e && e->episode && e->episode->title) { - if (de->de_title) lang_str_destroy(de->de_title); - de->de_title = lang_str_copy(e->episode->title); - save = 1; + save |= lang_str_set2(&de->de_title, e->episode->title) ? DVR_UPDATED_TITLE : 0; } else if (title) { - if (!de->de_title) de->de_title = lang_str_create(); - save = lang_str_add(de->de_title, title, lang, 1); + save |= lang_str_set(&de->de_title, title, lang) ? DVR_UPDATED_TITLE : 0; } /* Subtitle*/ if (e && e->episode && e->episode->subtitle) { - if (de->de_subtitle) lang_str_destroy(de->de_subtitle); - de->de_subtitle = lang_str_copy(e->episode->subtitle); - save = 1; + save |= lang_str_set2(&de->de_subtitle, e->episode->subtitle) ? DVR_UPDATED_SUBTITLE : 0; } else if (subtitle) { - if (!de->de_subtitle) de->de_subtitle = lang_str_create(); - save = lang_str_add(de->de_subtitle, subtitle, lang, 1); + save |= lang_str_set(&de->de_title, subtitle, lang) ? DVR_UPDATED_SUBTITLE : 0; } /* EID */ if (e && e->dvb_eid != de->de_dvb_eid) { de->de_dvb_eid = e->dvb_eid; - save = 1; + save |= DVR_UPDATED_EID; } /* Description */ if (e && e->description) { - if (de->de_desc) lang_str_destroy(de->de_desc); - de->de_desc = lang_str_copy(e->description); + save |= lang_str_set2(&de->de_desc, e->description) ? DVR_UPDATED_DESCRIPTION : 0; } else if (e && e->episode && e->episode->description) { - if (de->de_desc) lang_str_destroy(de->de_desc); - de->de_desc = lang_str_copy(e->episode->description); + save |= lang_str_set2(&de->de_desc, e->episode->description) ? DVR_UPDATED_DESCRIPTION : 0; } else if (e && e->summary) { - if (de->de_desc) lang_str_destroy(de->de_desc); - de->de_desc = lang_str_copy(e->summary); + save |= lang_str_set2(&de->de_desc, e->summary) ? DVR_UPDATED_DESCRIPTION : 0; } else if (e && e->episode && e->episode->summary) { - if (de->de_desc) lang_str_destroy(de->de_desc); - de->de_desc = lang_str_copy(e->episode->summary); + save |= lang_str_set2(&de->de_desc, e->episode->summary) ? DVR_UPDATED_DESCRIPTION : 0; } else if (desc) { - if (!de->de_desc) de->de_desc = lang_str_create(); - save = lang_str_add(de->de_desc, desc, lang, 1); + save |= lang_str_set(&de->de_desc, desc, lang) ? DVR_UPDATED_DESCRIPTION : 0; } /* Genre */ @@ -1406,14 +1432,14 @@ static dvr_entry_t *_dvr_entry_update epg_genre_t *g = LIST_FIRST(&e->episode->genre); if (g && (g->code / 16) != de->de_content_type) { de->de_content_type = g->code / 16; - save = 1; + save |= DVR_UPDATED_GENRE; } } /* Broadcast */ if (e && (de->de_bcast != e)) { dvr_entry_assign_broadcast(de, e); - save = 1; + save |= DVR_UPDATED_BROADCAST; } /* Episode */ @@ -1421,7 +1447,7 @@ static dvr_entry_t *_dvr_entry_update if (strcmp(de->de_episode ?: "", buf)) { free(de->de_episode); de->de_episode = strdup(buf); - save = 1; + save |= DVR_UPDATED_EPISODE; } } @@ -1430,9 +1456,10 @@ dosave: if (save) { idnode_changed(&de->de_id); htsp_dvr_entry_update(de); - tvhlog(LOG_INFO, "dvr", "\"%s\" on \"%s\": Updated%s", + tvhlog(LOG_INFO, "dvr", "\"%s\" on \"%s\": Updated%s (%s)", lang_str_get(de->de_title, NULL), DVR_CH_NAME(de), - updated ? " Timer" : ""); + updated ? " Timer" : "", + dvr_updated_str(buf, sizeof(buf), save)); } return de; @@ -2290,9 +2317,7 @@ dvr_entry_class_disp_title_set(void *o, const void *v) if (de->de_title) s = lang_str_get(de->de_title, lang); if (strcmp(s, v)) { - lang_str_destroy(de->de_title); - de->de_title = lang_str_create(); - lang_str_add(de->de_title, v, lang, 0); + lang_str_set(&de->de_title, v, lang); return 1; } return 0; @@ -2323,9 +2348,7 @@ dvr_entry_class_disp_subtitle_set(void *o, const void *v) if (de->de_subtitle) s = lang_str_get(de->de_subtitle, lang); if (strcmp(s, v)) { - lang_str_destroy(de->de_subtitle); - de->de_subtitle = lang_str_create(); - lang_str_add(de->de_subtitle, v, lang, 0); + lang_str_set(&de->de_subtitle, v, lang); return 1; } return 0; diff --git a/src/lang_str.c b/src/lang_str.c index 13aaedaa5..24a85fd20 100644 --- a/src/lang_str.c +++ b/src/lang_str.c @@ -161,6 +161,49 @@ int lang_str_append return _lang_str_add(ls, str, lang, 0, 1); } +/* Set new string with update check */ +int lang_str_set + ( lang_str_t **dst, const char *str, const char *lang ) +{ + lang_str_ele_t *e; + int found; + if (*dst == NULL) goto change1; + if (!lang) lang = lang_code_preferred(); + if (!(lang = lang_code_get(lang))) return 0; + if (*dst) { + found = 0; + RB_FOREACH(e, *dst, link) { + if (found) + goto change; + found = strcmp(e->lang, lang) == 0 && + strcmp(e->str, str) == 0; + if (!found) + goto change; + } + if (found) + return 0; + } +change: + lang_str_destroy(*dst); +change1: + *dst = lang_str_create(); + lang_str_add(*dst, str, lang, 1); + return 1; +} + +/* Set new strings with update check */ +int lang_str_set2 + ( lang_str_t **dst, lang_str_t *src ) +{ + if (*dst) { + if (!lang_str_compare(*dst, src)) + return 0; + lang_str_destroy(*dst); + } + *dst = lang_str_copy(src); + return 1; +} + /* Serialize map */ htsmsg_t *lang_str_serialize_map ( lang_str_t *ls ) { diff --git a/src/lang_str.h b/src/lang_str.h index 1048263e2..206fe3000 100644 --- a/src/lang_str.h +++ b/src/lang_str.h @@ -45,6 +45,10 @@ int lang_str_add ( lang_str_t *ls, const char *str, const char *lang, int update ); int lang_str_append ( lang_str_t *ls, const char *str, const char *lang ); +int lang_str_set + ( lang_str_t **dst, const char *str, const char *lang ); +int lang_str_set2 + ( lang_str_t **dst, lang_str_t *src ); /* Serialize/Deserialize */ htsmsg_t *lang_str_serialize_map