void mpegts_network_scan_queue_del ( mpegts_mux_t *mm ) { mpegts_network_t *mn = mm->mm_network; char buf[256], buf2[256]; if (mm->mm_scan_state == MM_SCAN_STATE_ACTIVE) { TAILQ_REMOVE(&mn->mn_scan_active, mm, mm_scan_link); } else if (mm->mm_scan_state == MM_SCAN_STATE_PEND) { TAILQ_REMOVE(&mn->mn_scan_pend, mm, mm_scan_link); } mpegts_mux_nice_name(mm, buf, sizeof(buf)); mn->mn_display_name(mn, buf2, sizeof(buf2)); tvhdebug("mpegts", "%s - removing mux %s from scan queue", buf2, buf); mm->mm_scan_state = MM_SCAN_STATE_IDLE; mm->mm_scan_weight = 0; gtimer_disarm(&mm->mm_scan_timeout); gtimer_arm(&mn->mn_scan_timer, mpegts_network_scan_timer_cb, mn, 0); mpegts_network_scan_notify(mm); }
void mpegts_network_scan_queue_add ( mpegts_mux_t *mm, int weight, int flags, int delay ) { int reload = 0; char buf[256], buf2[256];; mpegts_network_t *mn = mm->mm_network; if (!mm->mm_is_enabled(mm)) return; if (weight <= 0) return; if (weight > mm->mm_scan_weight) { mm->mm_scan_weight = weight; reload = 1; } /* Already active */ if (mm->mm_scan_state == MM_SCAN_STATE_ACTIVE) return; /* Remove entry (or ignore) */ if (mm->mm_scan_state == MM_SCAN_STATE_PEND) { if (!reload) return; TAILQ_REMOVE(&mn->mn_scan_pend, mm, mm_scan_link); } mpegts_mux_nice_name(mm, buf, sizeof(buf)); mn->mn_display_name(mn, buf2, sizeof(buf2)); tvhdebug("mpegts", "%s - adding mux %s to scan queue weight %d flags %04X", buf2, buf, weight, flags); /* Add new entry */ mm->mm_scan_state = MM_SCAN_STATE_PEND; mm->mm_scan_flags |= flags; if (mm->mm_scan_flags == 0) mm->mm_scan_flags = SUBSCRIPTION_IDLESCAN; TAILQ_INSERT_SORTED_R(&mn->mn_scan_pend, mpegts_mux_queue, mm, mm_scan_link, mm_cmp); gtimer_arm(&mn->mn_scan_timer, mpegts_network_scan_timer_cb, mn, delay); mpegts_network_scan_notify(mm); }
static void epggrab_ota_done ( epggrab_ota_mux_t *om, int reason ) { static const char *reasons[] = { [EPGGRAB_OTA_DONE_COMPLETE] = "complete", [EPGGRAB_OTA_DONE_TIMEOUT] = "timeout", [EPGGRAB_OTA_DONE_NO_DATA] = "no data", [EPGGRAB_OTA_DONE_STOLEN] = "stolen" }; char name[256]; mpegts_mux_t *mm; epggrab_ota_map_t *map; if (om->om_save) epggrab_ota_save(om); mm = mpegts_mux_find(om->om_mux_uuid); mpegts_mux_nice_name(mm, name, sizeof(name)); tvhdebug("epggrab", "grab done for %s (%s)", name, reasons[reason]); gtimer_disarm(&om->om_timer); gtimer_disarm(&om->om_data_timer); assert(om->om_q_type == EPGGRAB_OTA_MUX_ACTIVE); TAILQ_REMOVE(&epggrab_ota_active, om, om_q_link); om->om_q_type = EPGGRAB_OTA_MUX_IDLE; if (reason == EPGGRAB_OTA_DONE_STOLEN) { /* Do not requeue completed muxes */ if (!om->om_done && om->om_requeue) { TAILQ_INSERT_HEAD(&epggrab_ota_pending, om, om_q_link); om->om_q_type = EPGGRAB_OTA_MUX_PENDING; } else { om->om_requeue = 0; } } else if (reason == EPGGRAB_OTA_DONE_TIMEOUT) { om->om_requeue = 0; LIST_FOREACH(map, &om->om_modules, om_link) if (!map->om_complete) tvhlog(LOG_WARNING, "epggrab", "%s - data completion timeout for %s", map->om_module->name, name); } else {