function LSpinnerShow() { $(".loading-spinner-container").removeClass("d-none"); } function LSpinnerHide() { $(".loading-spinner-container").addClass("d-none"); } // Function to load media data function loadMediaList() { LSpinnerShow(); $("#media-table").addClass("d-none"); const tableBody = $("#media-table tbody"); tableBody.empty(); $.ajax({ url: "/media-list", method: "GET", success: function(data) { if (data.length > 0) { data.forEach((file, index) => { const videoInfo = file.info.video ? file.info.video.map((v, i) => !i ? `<li>Resolution: ${v.resolution}, Codec: ${v.codec}, Bitrate: ${v.bitrate}</li>` : `<li>Resolution: ${v.resolution}, Codec: ${v.codec}</li>`).join("") : "<li>No video streams</li>"; const audioInfo = file.info.audio ? file.info.audio.map(a => `<li>${a.title}, Channels: ${a.layout}, Codec: ${a.codec}, Bitrate: ${a.bitrate}, Language: ${a.language}</li>`).join("") : "<li>No audio streams</li>"; const details = ` <b>Video:</b> <ul>${videoInfo}</ul> <b>Audio:</b> <ul>${audioInfo}</ul> `; const pathEncoded = encodeURIComponent(file.path); tableBody.append(` <tr> <td>${index + 1}</td> <td> <div class="filename"><a href="/single?path=${pathEncoded}"><b>${file.name}</b></a></div> <div class="filepath">${file.path}</div> <div class="filedetails">${details}</div> </td> <td class="size_unit_${file.size_unit}" data-order="${file.size_bytes}">${file.size}${file.size_unit}</td> </tr> `); }); } else { tableBody.append(`<tr><td colspan="3" class="text-center">No files found</td></tr>`); } if(!$('#media-table_wrapper').length) { $('#media-table').DataTable({ columnDefs: [ { targets: "_all", render: function(data, type, row, meta) { var cell = meta.settings.aoData[meta.row].anCells[meta.col]; if (type === 'sort' && cell) { var orderValue = $(cell).attr('data-order'); return orderValue !== undefined ? orderValue : data; } return data; } } ] }); } LSpinnerHide(); $("#media-table").removeClass("d-none"); }, error: function(xhr, status, error) { LSpinnerHide(); console.error("Error loading media list:", error); } }); } function rescanMediaLibHandler() { $("#do-rescan-media-lib").on("click", function(){ $.getJSON("/media-list/clear-cache").done(function(resp){ if(resp.status) { return loadMediaList(); } console.error("Error of rescan media library"); // TODO: make alert bar alert("Error of rescan media library"); }); }); } $(document).ready(function() { loadMediaList(); rescanMediaLibHandler(); });