From ff4b32c8b820a82a18051a464bc948577a5215a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96man?= Date: Fri, 2 May 2008 07:58:28 +0000 Subject: [PATCH] Add option to delete stale DVB adapters --- ajaxui/ajaxui_config_dvb.c | 34 ++++++++++++++++++++++++++++++++++ ajaxui/tvheadend.js | 7 +++++++ dvb.c | 31 +++++++++++++++++++++++++++++++ dvb.h | 2 ++ 4 files changed, 74 insertions(+) diff --git a/ajaxui/ajaxui_config_dvb.c b/ajaxui/ajaxui_config_dvb.c index 8fe3bd52..e0799209 100644 --- a/ajaxui/ajaxui_config_dvb.c +++ b/ajaxui/ajaxui_config_dvb.c @@ -224,6 +224,14 @@ ajax_adaptereditor(http_connection_t *hc, http_reply_t *hr, "dvb_adapter_rename('%s', '%s');", tda->tda_identifier, tda->tda_displayname); + if(tda->tda_rootpath == NULL) { + tcp_qprintf(tq, " / "); + + ajax_a_jsfuncf(tq, "Delete adapter...", + "dvb_adapter_delete('%s', '%s');", + tda->tda_identifier, tda->tda_displayname); + } + tcp_qprintf(tq, ""); /* Clone adapter */ @@ -936,6 +944,30 @@ ajax_dvbadapterclone(http_connection_t *hc, http_reply_t *hr, } +/** + * Delete adapter + */ +static int +ajax_dvbadapterdelete(http_connection_t *hc, http_reply_t *hr, + const char *remain, void *opaque) +{ + tcp_queue_t *tq = &hr->hr_tq; + th_dvb_adapter_t *tda; + + if(remain == NULL || (tda = dvb_adapter_find_by_identifier(remain)) == NULL) + return HTTP_STATUS_NOT_FOUND; + + tcp_qprintf(tq, "var o = $('summary_%s'); o.parentNode.removeChild(o);\r\n", + tda->tda_identifier); + tcp_qprintf(tq, "$('dvbadaptereditor').innerHTML ='';\r\n"); + + dvb_tda_destroy(tda); + + http_output(hc, hr, "text/javascript; charset=UTF8", NULL, 0); + return 0; +} + + /** * */ @@ -964,5 +996,7 @@ ajax_config_dvb_init(void) AJAX_ACCESS_CONFIG); http_path_add("/ajax/dvbadapterclone", NULL, ajax_dvbadapterclone, AJAX_ACCESS_CONFIG); + http_path_add("/ajax/dvbadapterdelete", NULL, ajax_dvbadapterdelete, + AJAX_ACCESS_CONFIG); } diff --git a/ajaxui/tvheadend.js b/ajaxui/tvheadend.js index 778b7a8d..6485e4b5 100644 --- a/ajaxui/tvheadend.js +++ b/ajaxui/tvheadend.js @@ -85,6 +85,13 @@ function dvb_adapter_rename(id, oldname) } } +function dvb_adapter_delete(id, name) +{ + if(confirm("Are you sure you want to delete '" + name + "'") == true) { + a = new Ajax.Request('/ajax/dvbadapterdelete/' + id); + } +} + function makedivinput(id, url) { $(id).innerHTML='
' + diff --git a/dvb.c b/dvb.c index 5ac63603..72f01f2c 100644 --- a/dvb.c +++ b/dvb.c @@ -757,3 +757,34 @@ dvb_tda_clone(th_dvb_adapter_t *dst, th_dvb_adapter_t *src) } dvb_tda_save(dst); } + +/** + * + */ +int +dvb_tda_destroy(th_dvb_adapter_t *tda) +{ + th_dvb_mux_instance_t *tdmi; + + char buf[400]; + + if(tda->tda_rootpath != NULL) + return -1; + + snprintf(buf, sizeof(buf), "%s/dvbadapters/%s", + settings_dir, tda->tda_identifier); + + unlink(buf); + + while((tdmi = LIST_FIRST(&tda->tda_muxes)) != NULL) + dvb_mux_destroy(tdmi); + + TAILQ_REMOVE(&dvb_adapters, tda, tda_global_link); + + free(tda->tda_identifier); + free(tda->tda_displayname); + + free(tda); + + return 0; +} diff --git a/dvb.h b/dvb.h index 9f645560..ce96dc84 100644 --- a/dvb.h +++ b/dvb.h @@ -70,4 +70,6 @@ void tdmi_stop(th_dvb_mux_instance_t *tdmi); void dvb_tda_clone(th_dvb_adapter_t *dst, th_dvb_adapter_t *src); +int dvb_tda_destroy(th_dvb_adapter_t *tda); + #endif /* DVB_H_ */