From 6c2df772f9c18ff83c08ecba4d77f62514d1a13c Mon Sep 17 00:00:00 2001 From: "Arnaud G. GIBERT" Date: Mon, 13 Jul 2026 00:44:09 +0200 Subject: [PATCH] - Add docker support, - Add cache support for zip file size, - Remove obsolete JPlayer. --- Dockerfile | 4 +- ReleaseNotes.txt | 3 +- src/html/.links | 0 src/html/about.txt | 2 +- src/html/history.txt | 1 + src/html/lmbrowse.php | 305 ++++++++++++++---------------------------- src/html/welcome.txt | 1 + 7 files changed, 107 insertions(+), 209 deletions(-) create mode 100644 src/html/.links create mode 100644 src/html/history.txt create mode 100644 src/html/welcome.txt diff --git a/Dockerfile b/Dockerfile index 36634d0..9788a6b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -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} \ diff --git a/ReleaseNotes.txt b/ReleaseNotes.txt index 2c42444..26f7f30 100644 --- a/ReleaseNotes.txt +++ b/ReleaseNotes.txt @@ -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. diff --git a/src/html/.links b/src/html/.links new file mode 100644 index 0000000..e69de29 diff --git a/src/html/about.txt b/src/html/about.txt index 6ad4cad..34a2746 100644 --- a/src/html/about.txt +++ b/src/html/about.txt @@ -1,3 +1,3 @@ -This is the About text ! +This is the About text! Bye Bye... diff --git a/src/html/history.txt b/src/html/history.txt new file mode 100644 index 0000000..84fbfee --- /dev/null +++ b/src/html/history.txt @@ -0,0 +1 @@ +This is the History text! diff --git a/src/html/lmbrowse.php b/src/html/lmbrowse.php index 2d2dc3a..a6202ab 100644 --- a/src/html/lmbrowse.php +++ b/src/html/lmbrowse.php @@ -1,24 +1,27 @@ . */ +/* */ +/*--------------------------------------------------------------------------------------------------------------------------------*/ @@ -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 = "\"\""; } @@ -666,7 +669,6 @@ function lmb_header( $page_id, $page_name, $page_title, $description, $keywords, - $page_name "; @@ -1261,7 +1263,7 @@ function lmb_sitemap_play( $play_type, $play_id, $play_priority) if( ! file_exists( "{$extra_path}/.hide" )) { $cmd = "ls {$extra_path}/{$play_id}-*.png | sed -e 's/.*{$play_id}-//' | grep -v icon.png | sort "; - exec($cmd, $extra_tab); + exec( $cmd, $extra_tab); for( $i = 0, $j = 1; $i < count($extra_tab); $i++, $j++) { @@ -1300,7 +1302,7 @@ function lmb_sitemap_play_type( $play_type) $line = array(); $cmd = "ls -d {$path}/??-* | sed -e 's/.*\///'"; - exec($cmd, $line); + exec( $cmd, $line); for( $i = 0; $i < count($line); $i++) { @@ -1896,7 +1898,7 @@ function lmb_track_info_get( $play_type, $play_id, $play_priority, $track_id) $cmd="eval \$( metaflac --export-tags-to=- \"${track_file}\" | grep -v -e \".* .*=\" -e \".*-.*=\" | sed -e 's/=/=\\\"/' -e 's/$/\"/') echo -e \"\${TRACKNUMBER}\t\$(basename ${track_file} .flac)\t\${ARTIST}\t\${ALBUM}\t\$(echo \${TITLE} | sed 's/ (.*//')\t\$(echo \${TITLE} | sed -e 's/.* (//' -e 's/)$//')\t\${COMPOSER}\t\${COMMENT}\t\$(metaflac --show-sample-rate \"${track_file}\")\t\$(metaflac --show-total-samples \"${track_file}\")\t\${SAFECREATIVE}\""; - exec($cmd, $line); + exec( $cmd, $line); $tab = explode( "\t", $line[0]); @@ -2303,7 +2305,7 @@ function lmb_coverlist( $play_type, $play_id, $play_priority, $skin_path) ob_start(); $cmd="ls {$cover_path}-*-icon.png | sed -e 's/-icon.png$//' -e 's/.*-//'"; - exec($cmd, $sheet_tab); + exec( $cmd, $sheet_tab); $size=count($sheet_tab) + 1; // $height=220/$size; @@ -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,8 +2472,8 @@ 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"; - exec($cmd, $codec_tab); + $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())) { @@ -2509,7 +2511,7 @@ ${title_tag} &nbs $cmd="ls {$video_path}/* | grep -v -- -icon | grep -v -- -poster | sed -e 's/-[0-9][0-9]*p//' -e 's/.*\///' | sort -u"; - exec($cmd, $video_tab); + exec( $cmd, $video_tab); $height = max( 86, ( ( 220 - 30 * $codec_nb) / count($video_tab))); @@ -2622,7 +2624,7 @@ function lmb_extralist( $play_type, $play_id, $play_priority, $skin_path) ob_start(); $cmd="ls {$extra_path}/{$play_id}-*-*-icon.png | sed -e 's/-icon.png$//' -e 's/.*{$play_id}-.*-//' | sort -u"; - exec($cmd, $format_tab); + exec( $cmd, $format_tab); if( count($format_tab) == 0 || ( file_exists( "{$extra_path}/.hide" ) && ! lmb_admin_is())) { @@ -2661,7 +2663,7 @@ ${title_tag} &nbs $cmd="ls {$extra_path}/{$play_id}-*-*-icon.png | sed -e 's/-icon.png$//' -e 's/.*{$play_id}-//' | sort "; - exec($cmd, $extra_tab); + exec( $cmd, $extra_tab); $height = max( 86, ( ( 220 - 30 * $format_nb) / count($extra_tab))); @@ -2944,7 +2946,8 @@ 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); lmb_footer( $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; @@ -3241,45 +3244,11 @@ function lmb_jplayer_insert( $play_type, $play_id, $play_priority, $track_id, $t $track_file_base = "{$track_id}-{$track_name}-{$track_mix}"; } - $track_file_ogg = "{$track_path}/ogg-256/{$track_file_base}.ogg"; + $track_file_ogg = "{$track_path}/ogg-256/{$track_file_base}.ogg"; $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 " + echo " @@ -3292,126 +3261,13 @@ Your browser does not support the audio element. - - -
- -
- "; - } - else - { - - echo " - - - - - - - - -
  - - - - - "; - - - echo " - - - "; - - echo " - -
-
-
-
-
- - -
-
-
-
-
-
- - -
-
-
-
-
-
-
 
-
 
-
- -
-
-
-
-
 
-
-
- Update Required -To play the media you will need to either update your browser to a recent version or update your . -
-
  -
- - -
-
- - "; - echo "
 
- "; - - if( $lmb_jpi_enable == true) - { - echo "
"; - } - } + "; } - - /*--------------------------------------------------------------------------------------------------------------------*/ /* Track Introduction */ /*--------------------------------------------------------------------------------------------------------------------*/ @@ -3475,7 +3331,7 @@ function lmb_track_intro( $play_type, $play_id, $play_priority, $track_id, $trac "; - 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 " @@ -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 */ /*--------------------------------------------------------------------------------------------------------------------*/ @@ -3883,21 +3761,36 @@ function lmb_download_zip( $directory, $file_list, $mode) { switch($mode) { - case "SIZE": - { - return( exec( "cd {$directory}; du -cb ${file_list} | tail -1 | cut -f 1")); - } + case "SIZE": + { + $cache_dir = "{$directory}/cache"; + $cache_file = "{$cache_dir}/size-" . md5($file_list); - case "RSIZE": - { - return( exec( "cd {$directory}; zip -0 -j -p - ${file_list} | wc -c")); - } + // Ensure cache directory exists + if( !is_dir( $cache_dir)) + { + mkdir( $cache_dir, 0755); + } - case "DUMP": - { - passthru( "cd {$directory}; zip -0 -j -p - ${file_list}"); - break; - } + if( file_exists( $cache_file)) + { + $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} 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); + header( 'Content-Length: ' . $zip_size); + flush(); + $zip_size = lmb_download_zip( "{$play_dir}", $file_list, "DUMP"); } } @@ -3939,7 +3834,7 @@ function lmb_download_tracks( $play_type, $play_id, $play_priority, $file_type, if( isset($file_array[0]) && file_exists( $file_array[0])) { - $file_list = "tracks/{$file_type}/* covers/{$play_id}-*-800.png"; + $file_list = "tracks/{$file_type}/* covers/{$play_id}-*-800.png"; return( lmb_download_file( $play_dir, $file_list, $mode, "{$play_id}-{$file_type}")); } diff --git a/src/html/welcome.txt b/src/html/welcome.txt new file mode 100644 index 0000000..891e1f8 --- /dev/null +++ b/src/html/welcome.txt @@ -0,0 +1 @@ +This is the Welcome text!