home · contact · privacy
Add "inject all" button to /files view. master
authorChristian Heller <c.heller@plomlompom.de>
Mon, 17 Feb 2025 01:42:50 +0000 (02:42 +0100)
committerChristian Heller <c.heller@plomlompom.de>
Mon, 17 Feb 2025 01:42:50 +0000 (02:42 +0100)
src/templates/_base.tmpl
src/templates/files.tmpl

index cad70fa5816b9e02e466816b349ea2e15c5e103b..62443c8087cbac91d039f0058c337bca0a9973ad 100644 (file)
@@ -53,17 +53,12 @@ async function wrapped_fetch(target, fetch_kwargs=null, verbose=false) {
     }
 }
 
-async function post_to(data, target, verbose=false) {
-    const fetch_kwargs = {
+function player_command(command) {
+    wrapped_fetch(PATH_PLAYER, {
         method: "POST",
         headers: {"Content-Type": "application/json"},
-        body: JSON.stringify(data)
-    };
-    wrapped_fetch(target, fetch_kwargs, verbose);
-}
-
-function player_command(command) {
-    post_to({command: [command]}, PATH_PLAYER);
+        body: JSON.stringify({command: [command]})
+    });
 }
 
 event_handlers.push(function(data) {  // update player state
index d78805b4c9d49d6c21cb4c3ef5cac86861de7ca4..cd7dcf1052e392093a426617f8bb7867169f2b06 100644 (file)
@@ -7,6 +7,7 @@ const PATH_FILES_JSON = "/{{page_names.files_json}}";
 
 const all_tags = {{showable_tags|tojson|safe}};
 var needed_tags = [];
+var filtered_files = [];
 
 function select_tag() {
   if (tags_select.selectedIndex < 1) {
@@ -50,11 +51,11 @@ async function update_files_list() {
     let target = `${PATH_FILES_JSON}?filter_path=${filter_path}`;
     if (document.getElementById("input_show_absent").checked) { target = `${target}&show_absent=1`; }
     needed_tags.forEach((tag) => target = `${target}&needed_tag=${encodeURIComponent(tag)}`);
-    const files_data = await wrapped_fetch(target).then((response) => response.json());
-    document.getElementById("files_count").textContent = `${files_data.length}`;
+    filtered_files = await wrapped_fetch(target).then((response) => response.json());
+    document.getElementById("files_count").textContent = `${filtered_files.length}`;
     const table = document.getElementById("files_table");
     Array.from(document.getElementsByClassName("file_row")).forEach((row) => row.remove());
-    files_data.forEach((file) => {
+    filtered_files.forEach((file) => {
         const tr = new_child_to('tr', table);
         tr.classList.add("file_row");
         new_child_to('td', tr, file.size);
@@ -70,6 +71,10 @@ async function update_files_list() {
     });
 }
 
+function inject_all() {
+    filtered_files.forEach((file) => { player_command(`inject_${file.digest}`) });
+}
+
 window.addEventListener('load', update_filter_inputs);
 {% endblock %}
 
@@ -78,9 +83,12 @@ window.addEventListener('load', update_filter_inputs);
 filename pattern: <input id="input_filter_path" oninput="update_files_list()"  /><br />
 show absent: <input id="input_show_absent" type="checkbox" onclick="update_files_list()" /><br />
 needed tags: <select id="tags_select" onchange="select_tag()"></select><br />
-<span id="tags"></span><br />
+<span id="tags"></span>
 <hr />
-<p>known files (shown: <span id="files_count">?</span>):</p>
+<p>
+known files (shown: <span id="files_count">?</span>):
+<button onclick="inject_all();">inject all</button>
+</p>
 <table id="files_table">
 <tr><th>size</th><th>actions</th><th>tags</th><th>path</th></tr>
 </table>