- Add docker support,
- Add cache support for zip file size, - Remove obsolete JPlayer.
This commit is contained in:
@@ -27,7 +27,7 @@ ARG LMBROWSE_CONFIG_NAME=lmbrowse_config.inc
|
||||
ARG LMBROWSE_CONFIG_FILE=/etc/lmbrowse/lmbrowse_config.inc
|
||||
ARG LMBROWSE_SHARE_DIR=/usr/share/lmbrowse
|
||||
ARG LMBROWSE_WWW_DIR=/var/www/lmbrowse
|
||||
ARG LMBROWSE_LINKS="about.txt history.txt news.txt welcome.txt discography fonts skin skins tracks"
|
||||
ARG LMBROWSE_LINKS="about.txt history.txt news.txt welcome.txt discography .links fonts skin skins tracks"
|
||||
|
||||
|
||||
|
||||
@@ -65,7 +65,7 @@ COPY ${MODULE_PATH}/html ${LMBR
|
||||
|
||||
RUN . /etc/profile.d/rx3.sh && isl --add ${IMG_URL} \
|
||||
&& urpmi.update -a \
|
||||
&& urpmi --force flac \
|
||||
&& urpmi --force flac zip \
|
||||
&& sed -i -e "s%Alias /lmbrowse/%Alias LMBROWSE_URL%" ${LMBROWSE_HTTPD_CONFIG_FILE}.ref \
|
||||
&& mv ${LMBROWSE_SHARE_DIR}/${LMBROWSE_CONFIG_NAME} ${LMBROWSE_SHARE_DIR}/${LMBROWSE_CONFIG_NAME}.ref \
|
||||
&& ln -s ${LMBROWSE_CONFIG_FILE} ${LMBROWSE_SHARE_DIR}/${LMBROWSE_CONFIG_NAME} \
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
------------------------------------------------------------------------------------------------------------------------------------
|
||||
LMBrowse V 1.9.1 - A. GIBERT - 2026/07/??
|
||||
LMBrowse V 1.9.1 - A. GIBERT - 2026/07/13
|
||||
------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
- Add docker support,
|
||||
- Add cache support for zip file size,
|
||||
- Remove obsolete JPlayer.
|
||||
|
||||
|
||||
|
||||
0
src/html/.links
Normal file
0
src/html/.links
Normal file
1
src/html/history.txt
Normal file
1
src/html/history.txt
Normal file
@@ -0,0 +1 @@
|
||||
This is the History text!
|
||||
@@ -1,24 +1,27 @@
|
||||
<?
|
||||
/*
|
||||
* LMBrowse - Langueur Monotone Browser
|
||||
* Copyright (C) 2012-2026 Arnaud G. GIBERT
|
||||
* mailto:arnaud@rx3.net
|
||||
* http://www.rx3.org/dvp/lmbrowse
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
/*--------------------------------------------------------------------------------------------------------------------------------*/
|
||||
/* */
|
||||
/* LMBrowse - Langueur Monotone Browser */
|
||||
/* */
|
||||
/* Copyright (C) 2012-2026 Arnaud G. GIBERT */
|
||||
/* mailto:arnaud@rx3.net */
|
||||
/* http://www.rx3.org/dvp/lmbrowse */
|
||||
/* */
|
||||
/* This is free software: you can redistribute it and/or modify it */
|
||||
/* under the terms of the GNU Lesser General Public License as published */
|
||||
/* by the Free Software Foundation, either version 3 of the License, or */
|
||||
/* (at your option) any later version. */
|
||||
/* */
|
||||
/* This program is distributed in the hope that it will be useful, */
|
||||
/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
|
||||
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
|
||||
/* GNU Lesser General Public License for more details. */
|
||||
/* */
|
||||
/* You should have received a copy of the GNU Lesser General Public */
|
||||
/* License along with this program; If not, see */
|
||||
/* <https://www.gnu.org/licenses/>. */
|
||||
/* */
|
||||
/*--------------------------------------------------------------------------------------------------------------------------------*/
|
||||
|
||||
|
||||
|
||||
@@ -37,7 +40,7 @@ $time_start = microtime_float();
|
||||
include "lmbrowse_config.inc";
|
||||
|
||||
$lmb_myname="LMBrowse";
|
||||
$lmb_myver="1.9.0-1";
|
||||
$lmb_myver="1.9.1-1";
|
||||
|
||||
|
||||
|
||||
@@ -166,7 +169,7 @@ function lmb_cookies_load()
|
||||
|
||||
|
||||
lmb_cookie_load( "video_res", "1080p");
|
||||
lmb_cookie_load( "jpsolution", "native");
|
||||
// lmb_cookie_load( "jpsolution", "native");
|
||||
lmb_cookie_load( "admin", "");
|
||||
}
|
||||
|
||||
@@ -458,7 +461,7 @@ function lmb_make_tab( $tab_id, $css_id, $tab_side, $logo_path, $img_path, $data
|
||||
|
||||
if( $logo_path[0] == "/")
|
||||
{
|
||||
if( $img_path[0] == "/")
|
||||
if( $img_path != "")
|
||||
{
|
||||
$logo_tag = "<td class=\"logo-{$logo_side}\" style=\"width: 20%;\"><img class=\"button-item\" src=\"{$logo_path}\" alt=\"\" onclick=\"openModal('{$img_path}')\" style=\"cursor:pointer\"/></td>";
|
||||
}
|
||||
@@ -666,7 +669,6 @@ function lmb_header( $page_id, $page_name, $page_title, $description, $keywords,
|
||||
<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>
|
||||
<link rel=\"shortcut icon\" type=\"image/x-icon\" href=\"{$skin_path}/images/favicon.ico\"/>
|
||||
<link rel=\"stylesheet\" type=\"text/css\" href=\"{$skin_path}/default.css\"/>
|
||||
<link rel=\"stylesheet\" type=\"text/css\" href=\"/jplayer/skin/pink.flag/css/jplayer.pink.flag.css\"/>
|
||||
<title>$page_name</title>
|
||||
";
|
||||
|
||||
@@ -2372,7 +2374,7 @@ function lmb_video_file_tab_get( $play_type, $play_id, $play_priority, $video_id
|
||||
$play_path = lmb_play_path_get( $play_type, $play_id, $play_priority);
|
||||
$video_path = "{$play_path}/videos";
|
||||
|
||||
$cmd = "ls {$video_path}/{$video_id}* | sed -e 's/.*-//' -e 's/\..*$//' | grep -v icon | grep -v poster | sort -rnu";
|
||||
$cmd = "ls {$video_path}/{$video_id}* 2>/dev/null | sed -e 's/.*-//' -e 's/\..*$//' | grep -v icon | grep -v poster | sort -rnu";
|
||||
exec( $cmd, $video_format_tab);
|
||||
|
||||
$file_tab = array();
|
||||
@@ -2470,7 +2472,7 @@ function lmb_videolist( $play_type, $play_id, $play_priority, $skin_path)
|
||||
|
||||
ob_start();
|
||||
|
||||
$cmd="ls {$video_path}/* | sed -e 's/.*\.//' | grep -v \"png\" | sort -u";
|
||||
$cmd="ls {$video_path}/* 2>/dev/null | sed -e 's/.*\.//' | grep -v \"png\" | sort -u";
|
||||
exec( $cmd, $codec_tab);
|
||||
|
||||
if( count( $codec_tab) == 0 || ( file_exists( "{$video_path}/.hide" ) && ! lmb_admin_is()))
|
||||
@@ -2944,6 +2946,7 @@ function lmb_play_page( $play_type, $play_id, $play_priority)
|
||||
$play_name = lmb_play_type_name_get( $play_type);
|
||||
$skin_path = "{$play_path}/skin";
|
||||
|
||||
lmb_cache_test( $play_path);
|
||||
|
||||
lmb_header( 3, "Langueur Monotone - {$play_title} Page", "{$play_title}", "Langueur Monotone play page, giving all the information about {$play_info["name"]} {$play_name}", "{$play_type},{$play_info["name"]}", 0, "{$skin_path}");
|
||||
lmb_play_body( $play_type, $play_id, $play_priority, $skin_path);
|
||||
@@ -2958,7 +2961,7 @@ function lmb_play_page( $play_type, $play_id, $play_priority)
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------------------------------------------------------*/
|
||||
/* Track List Page */
|
||||
/* Track List Body */
|
||||
/*--------------------------------------------------------------------------------------------------------------------*/
|
||||
|
||||
function lmb_tracklist_body( $skin_path)
|
||||
@@ -3218,10 +3221,10 @@ function lmb_fulltitle_get( $play_type, $play_id, $play_priority, $track_id)
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------------------------------------------------------*/
|
||||
/* JPlayer Insert */
|
||||
/* Player Insert */
|
||||
/*--------------------------------------------------------------------------------------------------------------------*/
|
||||
|
||||
function lmb_jplayer_insert( $play_type, $play_id, $play_priority, $track_id, $track_name, $track_mix)
|
||||
function lmb_player_insert( $play_type, $play_id, $play_priority, $track_id, $track_name, $track_mix)
|
||||
{
|
||||
global $lmb_cookie_tab;
|
||||
global $lmb_url_pre;
|
||||
@@ -3245,40 +3248,6 @@ function lmb_jplayer_insert( $play_type, $play_id, $play_priority, $track_id, $t
|
||||
$track_file_mp3 = "{$track_path}/mp3-192/{$track_file_base}.mp3";
|
||||
$track_fulltitle = lmb_fulltitle_get( $play_type, $play_id, $play_priority, $track_id);
|
||||
|
||||
$solution_cookie = "jpsolution";
|
||||
$prefix_url = "{$lmb_url_post}?cookie_id={$solution_cookie}&cookie_value=";
|
||||
$query_string = preg_replace( "/cookie_id={$solution_cookie}&cookie_value=[^&]*&/", "", "{$_SERVER['QUERY_STRING']}");
|
||||
$solution_html_url = htmlentities( "{$prefix_url}html, flash&{$query_string}");
|
||||
$solution_flash_url = htmlentities( "{$prefix_url}flash, html&{$query_string}");
|
||||
$solution_native_url = htmlentities( "{$prefix_url}native&{$query_string}");
|
||||
|
||||
$solution_value = $lmb_cookie_tab[$solution_cookie];
|
||||
|
||||
if( "{$solution_value}" == "html, flash")
|
||||
{
|
||||
$html_class = "link-item-disabled";
|
||||
$flash_class = "link-item";
|
||||
$native_class = "link-item";
|
||||
}
|
||||
else
|
||||
{
|
||||
if( "{$solution_value}" == "flash, html")
|
||||
{
|
||||
$html_class = "link-item";
|
||||
$flash_class = "link-item-disabled";
|
||||
$native_class = "link-item";
|
||||
}
|
||||
else
|
||||
{
|
||||
$html_class = "link-item";
|
||||
$flash_class = "link-item";
|
||||
$native_class = "link-item-disabled";
|
||||
}
|
||||
}
|
||||
|
||||
if( "{$solution_value}" == "native")
|
||||
{
|
||||
|
||||
echo "
|
||||
<table class=\"list\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">
|
||||
<tbody>
|
||||
@@ -3292,123 +3261,10 @@ Your browser does not support the audio element.
|
||||
</audio>
|
||||
</td>
|
||||
</tr>
|
||||
<tr style=\"background-color:#222222; height: 25px;\">
|
||||
<td style=\"horizontal-align: left; vertical-align: middle;\">
|
||||
<div style=\"font-size: 12px;\"><a rel=\"nofollow\" class=\"{$html_class}\" href=\"{$solution_html_url}\">JPlayer HTML</a> <a rel=\"nofollow\" class=\"{$flash_class}\" href=\"{$solution_flash_url}\">JPlayer Flash</a> <a rel=\"nofollow\" class=\"{$native_class}\" href=\"{$solution_native_url}\">Native</a></div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
";
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
echo "
|
||||
<table class=\"list\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style=\"background-color:#3a2a45; border-top:1px solid #554461; border-bottom:1px solid #180a1f; border-left:1px solid #554461;\"> </td>
|
||||
<td style=\"width: 1%;\">
|
||||
|
||||
<script type=\"text/javascript\" src=\"/jplayer/lib/jquery.min.js\"></script>
|
||||
<script type=\"text/javascript\" src=\"/jplayer/jquery.jplayer.min.js\"></script>
|
||||
<script type=\"text/javascript\" src=\"/jplayer/jquery.jplayer.inspector.js\"></script>
|
||||
";
|
||||
|
||||
|
||||
echo "
|
||||
|
||||
<script type=\"text/javascript\">
|
||||
//<![CDATA[
|
||||
$(document).ready(function(){
|
||||
$(\"#jquery_jplayer_1\").jPlayer({
|
||||
ready: function (event) {
|
||||
$(this).jPlayer(\"setMedia\", {
|
||||
title: \"{$track_fulltitle}\",
|
||||
oga:\"{$track_file_ogg}\",
|
||||
mp3:\"{$track_file_mp3}\"
|
||||
}).jPlayer(\"play\");
|
||||
},
|
||||
swfPath: \"/jplayer\",
|
||||
supplied: \"oga, mp3\",
|
||||
wmode: \"window\",
|
||||
useStateClassSkin: true,
|
||||
autoBlur: true,
|
||||
smoothPlayBar: false,
|
||||
keyEnabled: true,
|
||||
remainingDuration: true,
|
||||
toggleDuration: true,
|
||||
backgroundColor: \"#012345\"
|
||||
});
|
||||
|
||||
$(\"#jplayer_inspector\").jPlayerInspector({jPlayer:$(\"#jquery_jplayer_1\")});
|
||||
});
|
||||
|
||||
//]]>
|
||||
</script>
|
||||
";
|
||||
|
||||
echo "
|
||||
|
||||
<div id=\"jquery_jplayer_1\" class=\"jp-jplayer\"></div>
|
||||
<div id=\"jp_container_1\" class=\"jp-audio\" role=\"application\" aria-label=\"media player\">
|
||||
<div class=\"jp-type-single\">
|
||||
<div class=\"jp-gui jp-interface\">
|
||||
<div class=\"jp-volume-controls\">
|
||||
<button class=\"jp-mute\" role=\"button\" tabindex=\"0\">mute</button>
|
||||
<button class=\"jp-volume-max\" role=\"button\" tabindex=\"0\">max volume</button>
|
||||
<div class=\"jp-volume-bar\">
|
||||
<div class=\"jp-volume-bar-value\"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class=\"jp-controls-holder\">
|
||||
<div class=\"jp-controls\">
|
||||
<button class=\"jp-play\" role=\"button\" tabindex=\"0\">play</button>
|
||||
<button class=\"jp-stop\" role=\"button\" tabindex=\"0\">stop</button>
|
||||
</div>
|
||||
<div class=\"jp-progress\">
|
||||
<div class=\"jp-seek-bar\">
|
||||
<div class=\"jp-play-bar\"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class=\"jp-current-time\" role=\"timer\" aria-label=\"time\"> </div>
|
||||
<div class=\"jp-duration\" role=\"timer\" aria-label=\"duration\"> </div>
|
||||
<div class=\"jp-toggles\">
|
||||
<button class=\"jp-repeat\" role=\"button\" tabindex=\"0\">repeat</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class=\"jp-details\">
|
||||
<div class=\"jp-title\" aria-label=\"title\"> </div>
|
||||
</div>
|
||||
<div class=\"jp-no-solution\">
|
||||
<span>Update Required</span>
|
||||
To play the media you will need to either update your browser to a recent version or update your <div class=\"link-item\"><a href=\"http://get.adobe.com/flashplayer/\" target=\"_blank\">Flash plugin</a></div>.
|
||||
</div>
|
||||
<div>
|
||||
</div>
|
||||
<div style=\"font-size: 12px;\"><a rel=\"nofollow\" class=\"{$html_class}\" href=\"{$solution_html_url}\">JPlayer HTML</a> <a rel=\"nofollow\" class=\"{$flash_class}\" href=\"{$solution_flash_url}\">JPlayer Flash</a> <a rel=\"nofollow\" class=\"{$native_class}\" href=\"{$solution_native_url}\">Native</a></div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
";
|
||||
echo " </td>
|
||||
<td style=\"background-color:#3a2a45; border-top:1px solid #554461; border-bottom:1px solid #180a1f; border-right:1px solid #180a1f;\"> </td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
";
|
||||
|
||||
if( $lmb_jpi_enable == true)
|
||||
{
|
||||
echo "<div id=\"jplayer_inspector\"></div>";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -3475,7 +3331,7 @@ function lmb_track_intro( $play_type, $play_id, $play_priority, $track_id, $trac
|
||||
<td>
|
||||
";
|
||||
|
||||
lmb_jplayer_insert( $play_type, $play_id, $play_priority, $track_id, $track_name, $track_mix);
|
||||
lmb_player_insert( $play_type, $play_id, $play_priority, $track_id, $track_name, $track_mix);
|
||||
|
||||
echo " </td>
|
||||
</tr>
|
||||
@@ -3863,6 +3719,8 @@ function lmb_track_page( $play_type, $play_id, $play_priority, $track_id)
|
||||
$track_title = lmb_title_get( $play_type, $play_id, $play_priority, $track_id);
|
||||
$track_fulltitle = lmb_fulltitle_get( $play_type, $play_id, $play_priority, $track_id);
|
||||
|
||||
lmb_cache_test( $play_path);
|
||||
|
||||
lmb_header( 4, "Langueur Monotone - {$track_fulltitle} - Track Page", "{$track_fulltitle} - Track", "Langueur Monotone track page, giving all the information about {$track_fulltitle} track", "track, {$track_title}, {$track_fulltitle}", 962, "{$skin_path}");
|
||||
lmb_track_body( $play_type, $play_id, $play_priority, $track_id, $skin_path);
|
||||
lmb_footer( $skin_path);
|
||||
@@ -3875,6 +3733,26 @@ function lmb_track_page( $play_type, $play_id, $play_priority, $track_id)
|
||||
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------------------------------------------------------*/
|
||||
/* Cache Test */
|
||||
/*--------------------------------------------------------------------------------------------------------------------*/
|
||||
|
||||
function lmb_cache_test( $directory)
|
||||
{
|
||||
$cache_dir = "{$directory}/cache";
|
||||
|
||||
// Check if any content file is newer than the cache directory
|
||||
$count = (int)exec( "find {$directory} -newer {$cache_dir} -not -path '{$cache_dir}/*' | grep -c .");
|
||||
|
||||
if( $count > 0)
|
||||
{
|
||||
// Purge all caches, they are all potentially stale
|
||||
array_map('unlink', glob("{$cache_dir}/*"));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------------------------------------------------------*/
|
||||
/* Download ZIP */
|
||||
/*--------------------------------------------------------------------------------------------------------------------*/
|
||||
@@ -3885,17 +3763,32 @@ function lmb_download_zip( $directory, $file_list, $mode)
|
||||
{
|
||||
case "SIZE":
|
||||
{
|
||||
return( exec( "cd {$directory}; du -cb ${file_list} | tail -1 | cut -f 1"));
|
||||
$cache_dir = "{$directory}/cache";
|
||||
$cache_file = "{$cache_dir}/size-" . md5($file_list);
|
||||
|
||||
// Ensure cache directory exists
|
||||
if( !is_dir( $cache_dir))
|
||||
{
|
||||
mkdir( $cache_dir, 0755);
|
||||
}
|
||||
|
||||
case "RSIZE":
|
||||
if( file_exists( $cache_file))
|
||||
{
|
||||
return( exec( "cd {$directory}; zip -0 -j -p - ${file_list} | wc -c"));
|
||||
$size = file_get_contents( $cache_file);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Recompute and store — this updates cache dir mtime for next check
|
||||
$size = exec( "cd {$directory}; zip -0 -j -p - {$file_list} 2>/dev/null | wc -c");
|
||||
file_put_contents( $cache_file, $size);
|
||||
}
|
||||
|
||||
return( (int)$size);
|
||||
}
|
||||
|
||||
case "DUMP":
|
||||
{
|
||||
passthru( "cd {$directory}; zip -0 -j -p - ${file_list}");
|
||||
passthru( "cd {$directory}; zip -0 -j -p - {$file_list} 2>/dev/null");
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -3915,13 +3808,15 @@ function lmb_download_file( $play_dir, $file_list, $mode, $download_name)
|
||||
}
|
||||
else
|
||||
{
|
||||
$zip_size = lmb_download_zip( "{$play_dir}", $file_list, "RSIZE");
|
||||
$zip_size = lmb_download_zip( "{$play_dir}", $file_list, "SIZE");
|
||||
|
||||
header( "Content-Description: Langueur Monotone - {$download_name}");
|
||||
header( 'Content-Type: application/zip');
|
||||
header( 'Content-Disposition: attachment; filename="'."langueur_monotone-{$download_name}.zip".'"');
|
||||
header( 'Content-Length: ' . $zip_size);
|
||||
|
||||
flush();
|
||||
|
||||
$zip_size = lmb_download_zip( "{$play_dir}", $file_list, "DUMP");
|
||||
}
|
||||
}
|
||||
|
||||
1
src/html/welcome.txt
Normal file
1
src/html/welcome.txt
Normal file
@@ -0,0 +1 @@
|
||||
This is the Welcome text!
|
||||
Reference in New Issue
Block a user