]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
Add support for moving channels between groups
authorAndreas Öman <andreas@lonelycoder.com>
Thu, 17 Apr 2008 20:22:35 +0000 (20:22 +0000)
committerAndreas Öman <andreas@lonelycoder.com>
Thu, 17 Apr 2008 20:22:35 +0000 (20:22 +0000)
ajaxui/ajaxui.css
ajaxui/ajaxui_config_channels.c

index 39830a092ca736e42d157aa50585fdd075901af6..a5a8deeb9fd94551c36bf42a3c4470e5f3db99fa 100644 (file)
@@ -61,14 +61,23 @@ img { border: 0; }
 }
 
 .infoprefixwide {
-       padding-right: 10px;
+       padding-right: 5px;
        float: left;
        width: 100px;
        text-align: right;
 }
 
 .infoprefixwidefat {
-       padding-right: 10px;
+       padding-right: 5px;
+       float: left;
+       width: 100px;
+       text-align: right;
+       margin-top: 4px;
+}
+
+
+.infoprefixwidewidefat {
+       padding-right: 5px;
        float: left;
        width: 130px;
        text-align: right;
index 62d5a5d401e9fc9fc55a9e3914f8ef6fee358775..5052c9329d5e2a4478124057cb3d938850d03977 100644 (file)
@@ -245,7 +245,7 @@ ajax_chgroup_editor(http_connection_t *hc, http_reply_t *hr,
 {
   tcp_queue_t *tq = &hr->hr_tq;
   th_channel_t *ch;
-  th_channel_group_t *tcg;
+  th_channel_group_t *tcg, *tcg2;
   int rowcol = 1;
   int disprows;
 
@@ -284,6 +284,26 @@ ajax_chgroup_editor(http_connection_t *hc, http_reply_t *hr,
   }
   tcp_qprintf(tq, "}\r\n");
 
+
+  /* Invoke AJAX call containing all selected elements */
+  tcp_qprintf(tq, 
+             "select_do = function(op, arg1, arg2) {\r\n"
+             "var h = new Hash();\r\n"
+             "h.set('arg1', arg1);\r\n"
+             "h.set('arg2', arg2);\r\n"
+             );
+  
+  TAILQ_FOREACH(ch, &tcg->tcg_channels, ch_group_link) {
+    tcp_qprintf(tq, 
+               "if($('sel_%d').checked) {h.set('%d', 'selected') }\r\n",
+               ch->ch_tag, ch->ch_tag);
+  }
+
+  tcp_qprintf(tq, " new Ajax.Request('/ajax/chop/' + op, "
+             "{parameters: h});\r\n");
+  tcp_qprintf(tq, "}\r\n");
+
+
   tcp_qprintf(tq, 
              "\r\n//]]>\r\n"
              "</script>\r\n");
@@ -322,15 +342,35 @@ ajax_chgroup_editor(http_connection_t *hc, http_reply_t *hr,
 
   tcp_qprintf(tq, "<div style=\"overflow: auto; width: 100%\">");
 
-  tcp_qprintf(tq, "<div class=\"infoprefix\">Select:</div><div>");
+  tcp_qprintf(tq, "<div class=\"infoprefixwide\">Select:</div><div>");
 
   ajax_a_jsfunc(tq, "All",                       "select_all();",      " / ");
   ajax_a_jsfunc(tq, "None",                      "select_none();",     " / ");
   ajax_a_jsfunc(tq, "Invert",                    "select_invert();",   "");
 
   tcp_qprintf(tq, "</div></div>\r\n");
-  
 
+
+  tcp_qprintf(tq, "<div style=\"margin-top: 5px; "
+             "overflow: auto; width: 100%\">");
+
+  tcp_qprintf(tq,
+             "<div class=\"infoprefixwidefat\">Move to group:</div>"
+             "<div>"
+             "<select id=\"movetarget\" class=\"textinput\" "
+             "onChange=\"select_do('changegroup', "
+             "$('movetarget').value, '%d')\">", tcg->tcg_tag);
+  tcp_qprintf(tq, "<option value="">Select group</option>");
+
+  TAILQ_FOREACH(tcg2, &all_channel_groups, tcg_global_link) {
+    if(tcg2->tcg_hidden || tcg == tcg2)
+      continue;
+    tcp_qprintf(tq, "<option value=\"%d\">%s</option>",
+               tcg2->tcg_tag, tcg2->tcg_name);
+  }
+  tcp_qprintf(tq, "</select></div>");
+  tcp_qprintf(tq, "</div>");
+  tcp_qprintf(tq, "</div>");
   ajax_box_end(tq, AJAX_BOX_SIDEBOX);
 
 
@@ -398,7 +438,8 @@ ajax_cheditor(http_connection_t *hc, http_reply_t *hr,
   tcp_qprintf(tq, "<hr>\r\n");
 
   tcp_qprintf(tq,
-             "<div class=\"infoprefixwidefat\">Commercial detection:</div>"
+             "<div class=\"infoprefixwidewidefat\">"
+             "Commercial detection:</div>"
              "<div>"
              "<select id=\"cdetect_%d\" class=\"textinput\">",
              ch->ch_tag);
@@ -413,6 +454,49 @@ ajax_cheditor(http_connection_t *hc, http_reply_t *hr,
   return 0;
 }
 
+/**
+ * Change group for channel(s)
+ */
+static int
+ajax_changegroup(http_connection_t *hc, http_reply_t *hr,
+                const char *remain, void *opaque)
+{
+  tcp_queue_t *tq = &hr->hr_tq;
+  th_channel_t *ch;
+  th_channel_group_t *tcg;
+  http_arg_t *ra;
+  const char *s;
+  const char *curgrp;
+
+  if((s = http_arg_get(&hc->hc_req_args, "arg1")) == NULL)
+    return HTTP_STATUS_BAD_REQUEST;
+
+  if((curgrp = http_arg_get(&hc->hc_req_args, "arg2")) == NULL)
+    return HTTP_STATUS_BAD_REQUEST;
+
+  tcg = channel_group_by_tag(atoi(s));
+  if(tcg == NULL)
+    return HTTP_STATUS_BAD_REQUEST;
+
+  TAILQ_FOREACH(ra, &hc->hc_req_args, link) {
+    if(strcmp(ra->val, "selected"))
+      continue;
+    
+    if((ch = channel_by_tag(atoi(ra->key))) != NULL)
+      channel_set_group(ch, tcg);
+  }
+
+  tcp_qprintf(tq,
+             "$('cheditortab').innerHTML=''; "
+             "new Ajax.Updater('groupeditortab', "
+             "'/ajax/chgroup_editor/%s', "
+             "{method: 'get', evalScripts: true});", curgrp);
+  
+  http_output(hc, hr, "text/javascript; charset=UTF-8", NULL, 0);
+  return 0;
+}
+
+
 /**
  *
  */
@@ -424,4 +508,6 @@ ajax_config_channels_init(void)
   http_path_add("/ajax/chgroup_updateorder", NULL, ajax_chgroup_updateorder);
   http_path_add("/ajax/chgroup_editor",      NULL, ajax_chgroup_editor);
   http_path_add("/ajax/cheditor",            NULL, ajax_cheditor);
+  http_path_add("/ajax/chop/changegroup",    NULL, ajax_changegroup);
+
 }