diff --git a/src/input/mpegts.h b/src/input/mpegts.h index b2c83d5c..7563d389 100644 --- a/src/input/mpegts.h +++ b/src/input/mpegts.h @@ -445,6 +445,7 @@ struct mpegts_service uint16_t s_dvb_prefcapid; int s_dvb_prefcapid_lock; uint16_t s_dvb_forcecaid; + time_t s_dvb_created; time_t s_dvb_last_seen; /* diff --git a/src/input/mpegts/mpegts_service.c b/src/input/mpegts/mpegts_service.c index 1b4c39b8..28ad858c 100644 --- a/src/input/mpegts/mpegts_service.c +++ b/src/input/mpegts/mpegts_service.c @@ -183,6 +183,13 @@ const idclass_t mpegts_service_class = .off = offsetof(mpegts_service_t, s_dvb_forcecaid), .opts = PO_ADVANCED | PO_HEXA, }, + { + .type = PT_TIME, + .id = "created", + .name = "Created", + .off = offsetof(mpegts_service_t, s_dvb_created), + .opts = PO_ADVANCED | PO_RDONLY, + }, { .type = PT_TIME, .id = "last_seen", @@ -519,6 +526,9 @@ mpegts_service_create0 int r; char buf[256]; + /* defaults for older version */ + s->s_dvb_created = dispatch_clock; + if (service_create0((service_t*)s, class, uuid, S_MPEG_TS, conf) == NULL) return NULL; @@ -559,6 +569,10 @@ mpegts_service_create0 idnode_notify_simple(&mm->mm_id); idnode_notify_simple(&mm->mm_network->mn_id); + /* Save the create time */ + if (s->s_dvb_created == dispatch_clock) + service_request_save((service_t *)s, 0); + return s; } @@ -582,9 +596,11 @@ mpegts_service_find s->s_pmt_pid = pmt_pid; if (save) *save = 1; } - if (create && (*save || s->s_dvb_last_seen + 3600 < dispatch_clock)) { - s->s_dvb_last_seen = dispatch_clock; - if (save) *save = 1; + if (create) { + if ((save && *save) || s->s_dvb_last_seen + 3600 < dispatch_clock) { + s->s_dvb_last_seen = dispatch_clock; + if (save) *save = 1; + } } return s; } @@ -593,7 +609,7 @@ mpegts_service_find /* Create */ if (create) { s = mm->mm_network->mn_create_service(mm, sid, pmt_pid); - s->s_dvb_last_seen = dispatch_clock; + s->s_dvb_created = s->s_dvb_last_seen = dispatch_clock; if (save) *save = 1; }