Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
DVR: show what changed in dvr_entry_update
  • Loading branch information
perexg committed Nov 3, 2015
1 parent f5e0caa commit 0cc616e
Show file tree
Hide file tree
Showing 3 changed files with 113 additions and 43 deletions.
109 changes: 66 additions & 43 deletions src/dvr/dvr_db.c
Expand Up @@ -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;
}

/**
*
Expand All @@ -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;
}
}

Expand All @@ -1303,20 +1340,20 @@ 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;
}

/* Channel */
if (ch && (ch != de->de_channel)) {
de->de_channel = ch;
save = 1;
save |= DVR_UPDATED_CHANNEL;
}

/* Start/Stop */
Expand All @@ -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;
Expand All @@ -1359,69 +1396,58 @@ 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 */
if (e && e->episode) {
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 */
if (dvr_entry_get_episode(de->de_bcast, buf, sizeof(buf))) {
if (strcmp(de->de_episode ?: "", buf)) {
free(de->de_episode);
de->de_episode = strdup(buf);
save = 1;
save |= DVR_UPDATED_EPISODE;
}
}

Expand All @@ -1430,9 +1456,10 @@ static dvr_entry_t *_dvr_entry_update
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;
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down
43 changes: 43 additions & 0 deletions src/lang_str.c
Expand Up @@ -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 )
{
Expand Down
4 changes: 4 additions & 0 deletions src/lang_str.h
Expand Up @@ -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
Expand Down

0 comments on commit 0cc616e

Please sign in to comment.