]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
mpegts mux: add 'created', 'scan_first', 'scan_last' info
authorJaroslav Kysela <perex@perex.cz>
Tue, 8 Aug 2017 14:43:02 +0000 (16:43 +0200)
committerJaroslav Kysela <perex@perex.cz>
Tue, 8 Aug 2017 14:43:02 +0000 (16:43 +0200)
src/input/mpegts.h
src/input/mpegts/mpegts_mux.c
src/input/mpegts/mpegts_network_scan.c

index ba4e7b5c3e1c1de9b16f894193c0661cdd4be8c7..13f9e08a2ff961283f5aead3cc1657b6341b7c7a 100644 (file)
@@ -439,6 +439,7 @@ struct mpegts_mux
   int                     mm_tsid_accept_zero_value;
   tvhlog_limit_t          mm_tsid_loglimit;
   int64_t                 mm_start_monoclock;
+  time_t                  mm_created;
 
   int                     mm_update_pids_flag;
   mtimer_t                mm_update_pids_timer;
@@ -453,6 +454,9 @@ struct mpegts_mux
    * Scanning
    */
 
+  time_t                   mm_scan_first;   ///< Time for the first successful scan
+  time_t                   mm_scan_last_seen; ///< Time for the last successful scan
+
   mpegts_mux_scan_result_t mm_scan_result;  ///< Result of last scan
   int                      mm_scan_weight;  ///< Scan priority
   int                      mm_scan_flags;   ///< Subscription flags
@@ -461,13 +465,6 @@ struct mpegts_mux
   TAILQ_ENTRY(mpegts_mux)  mm_scan_link;    ///< Link to Queue
   mpegts_mux_scan_state_t  mm_scan_state;   ///< Scanning state
 
-#if 0
-  enum {
-    MM_ORIG_USER, ///< Manually added
-    MM_ORIG_FILE, ///< Added from scan file
-    MM_ORIG_AUTO  ///< From NIT
-  }                        mm_dmc_origin2;
-#endif
   void                    *mm_dmc_origin;
   int64_t                  mm_dmc_origin_expire;
 
index 5b2b06d16fa088599b0d07a553bbd02ae84c9f14..b085c94b6acce233740b8d749570e0e1497db555 100644 (file)
@@ -682,6 +682,30 @@ const idclass_t mpegts_mux_class =
       .off      = offsetof(mpegts_mux_t, mm_sid_filter),
       .opts     = PO_HIDDEN | PO_EXPERT
     },
+    {
+      .type     = PT_TIME,
+      .id       = "created",
+      .name     = N_("Created"),
+      .desc     = N_("When the mux was created."),
+      .off      = offsetof(mpegts_mux_t, mm_created),
+      .opts     = PO_ADVANCED | PO_RDONLY,
+    },
+    {
+      .type     = PT_TIME,
+      .id       = "scan_first",
+      .name     = N_("First scan"),
+      .desc     = N_("When the mux was successfully scanned for the first time."),
+      .off      = offsetof(mpegts_mux_t, mm_scan_first),
+      .opts     = PO_ADVANCED | PO_RDONLY,
+    },
+    {
+      .type     = PT_TIME,
+      .id       = "scan_last",
+      .name     = N_("Last scan"),
+      .desc     = N_("When the mux was successfully scanned."),
+      .off      = offsetof(mpegts_mux_t, mm_scan_last_seen),
+      .opts     = PO_ADVANCED | PO_RDONLY,
+    },
     {}
   }
 };
@@ -1218,6 +1242,7 @@ mpegts_mux_create0
   pthread_mutex_init(&mm->mm_descrambler_lock, NULL);
 
   mm->mm_last_pid            = -1;
+  mm->mm_created             = gclk();
 
 #if ENABLE_TSDEBUG
   pthread_mutex_init(&mm->mm_tsdebug_lock, NULL);
index bfc718bea7d242336f335cd9531dfd2b9715e6e7..70adf5047aa33f8605957131596a5fb79640aacd 100644 (file)
@@ -111,6 +111,13 @@ mpegts_network_scan_mux_done0
   mpegts_network_t *mn = mm->mm_network;
   mpegts_mux_scan_state_t state = mm->mm_scan_state;
 
+  if (result == MM_SCAN_OK || result == MM_SCAN_PARTIAL) {
+    mm->mm_scan_last_seen = gclk();
+    if (mm->mm_scan_first == 0)
+      mm->mm_scan_first = mm->mm_scan_last_seen;
+    idnode_changed(&mm->mm_id);
+  }
+
   /* prevent double del: */
   /*   mpegts_mux_stop -> mpegts_network_scan_mux_cancel */
   mm->mm_scan_state = MM_SCAN_STATE_IDLE;