From 8166dfa42fc9bd0bf800d361ae2f6893c8c71e3c Mon Sep 17 00:00:00 2001 From: profiteroles Date: Sat, 19 Oct 2019 05:54:29 -0700 Subject: [PATCH] 0.8.0.2 --- CHANGELOG.md | 6 +++ README.md | 2 +- Tester.zip | Bin 68649416 -> 68648670 bytes Tester/Tester.php | 40 ++++++++------ Yuba.app.zip | Bin 43872142 -> 43872433 bytes Yuba.php | 48 +++++++++-------- YubaPrefs.php | 7 ++- current_version.txt | 2 +- filetypes.php | 118 +++++++++++++++++++++++----------------- functions.php | 29 +++++++++- helper.php | 129 +++++++++++++++++++++++++++----------------- prefs.php | 2 +- web/rtc.php | 4 +- 13 files changed, 245 insertions(+), 142 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 26ba2a3..0563aa5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,12 @@ # Changelog All notable changes to this project will be documented in this file. Older changes are summarized on individual commits. +## [0.8.0.2] +- Tweaks to directory icons +- Output redirection fixes +- Thumbnail bindings +- "Add to existing" prefs option + ## [0.8.0.1] - Move batchfile generation to Prescan - Rewrite batchfile generation (batch now handles files, links, dirs) diff --git a/README.md b/README.md index be9b2f2..38494b6 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ **Yuba** generates web-browsable catalogues from locally attached HFS+ filesystems. Its client application gathers forensic-quality data about a volume, properly interpreting bundles, reading Spotlight data, Finder flags, labels, and other contextual information. It can generate hashes, thumbnails, and gather 3rd party metadata with exiftool and mediainfo. Yuba's SQLite catalogues are comprehensive, lightweight, optimized for massive (1 million+) trees, and reflect incremental changes to contents and metadata. A server-side PHP script is provided, which allows familiar, Finder-style browsing of a catalogue. -####[⇩ Download Yuba 0.8.0.1](https://www.profiteroles.org/git/p/Yuba/raw/master/Yuba.app.zip) ([Changelog](CHANGELOG.md)) +####[⇩ Download Yuba 0.8.0.2](https://www.profiteroles.org/git/p/Yuba/raw/master/Yuba.app.zip) ([Changelog](CHANGELOG.md)) ## Features diff --git a/Tester.zip b/Tester.zip index bee865457562fe4978a2c6ae64045be53f9a96c0..54a6347ec3e60ced2d91a4d75e37661f53fe2779 100644 GIT binary patch delta 38321 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 X)y$OUJd;gVenlnW$9e!10)hVl*UnH% diff --git a/Tester/Tester.php b/Tester/Tester.php index af6abb0..d0fb8a4 100644 --- a/Tester/Tester.php +++ b/Tester/Tester.php @@ -44,6 +44,9 @@ mkdir($wprefix); if ($mode == "thumb") { + $cmd['ql-thumbnail'][] = $bin_qlthumb." ".$shellpath." ".$tprefix."ql-thumbnail.jpg public.jpeg ".$p['thumb_size']." ".$p['thumb_size']." .8"; + $cmd['ql-thumbnail'][] = $tprefix."ql-thumbnail.jpg"; + $cmd['sips'][] = $bin_sips." -s format jpeg -s formatOptions 80 -Z ".$p['thumb_size']." ".$shellpath." --out ".$tprefix."sips.jpg"; // add ?? "-d profile --deleteColorManagementProperties" $cmd['sips'][] = $tprefix."sips.jpg"; @@ -59,18 +62,21 @@ if ($mode == "thumb") { $cmd['qlmanage'][] = $bin_qlmanage." -t -s ".$p['thumb_size']." -o ".$wprefix." ".$shellpath." ; mv ".escapeshellarg($wprefix.basename($argv[2]).".png")." ".$tprefix."qlmanage.png"; $cmd['qlmanage'][] = $tprefix."qlmanage.png"; - $cmd['ql-thumbnail'][] = $bin_qlthumb." ".$shellpath." ".$tprefix."qlthumb.jpg public.jpeg ".$p['thumb_size']." ".$p['thumb_size']." .8"; - $cmd['ql-thumbnail'][] = $tprefix."qlthumb.jpg"; - $cmd['sox_q'][] = $bin_sox." ".$shellpath." -n trim 0 $(".$bin_exiftool." -s -s -s -duration# ".$shellpath." | awk '{print $1/10}') spectrogram -o - | ".$bin_pngquant." - -o ".$tprefix."sox-quant.png"; $cmd['sox_q'][] = $tprefix."sox-quant.png"; $cmd['sox_c'][] = $bin_sox." ".$shellpath." -n trim 0 $(".$bin_exiftool." -s -s -s -duration# ".$shellpath." | awk '{print $1/10}') spectrogram -o - | ".$bin_convert." - -quality 85% ".$tprefix."sox-convert.jpg"; $cmd['sox_c'][] = $tprefix."sox-convert.jpg"; - $cmd['sox_cx'][] = $bin_sox." ".$shellpath." -n remix - trim 0 $(".$bin_exiftool." -s -s -s -duration# ".$shellpath." | awk '{print $1/10}') spectrogram -r -o - | ".$bin_convert." - -quality 85% ".$tprefix."sox-convert_x.jpg"; + $cmd['sox_cx'][] = $bin_sox." ".$shellpath." -n remix - trim 0 $(".$bin_exiftool." -s -s -s -duration# ".$shellpath." | awk '{print $1/20}') spectrogram -r -o - | ".$bin_convert." - -quality 85% ".$tprefix."sox-convert_x.jpg"; $cmd['sox_cx'][] = $tprefix."sox-convert_x.jpg"; + $cmd['sox_cy'][] = $bin_sox." ".$shellpath." -n remix - trim 0 $(".$bin_exiftool." -s -s -s -duration# ".$shellpath." | awk '{print $1/4}') spectrogram -r -o - | ".$bin_convert." - -quality 85% ".$tprefix."sox-convert_y.jpg"; + $cmd['sox_cy'][] = $tprefix."sox-convert_y.jpg"; + + $cmd['sox_cz'][] = $bin_sox." ".$shellpath." -n remix - spectrogram -r -o - | ".$bin_convert." - -quality 85% ".$tprefix."sox-convert_all.jpg"; + $cmd['sox_cz'][] = $tprefix."sox-convert_all.jpg"; + $cmd['sox_s'][] = $bin_sox." ".$shellpath." -n trim 0 $(".$bin_exiftool." -s -s -s -duration# ".$shellpath." | awk '{print $1/10}') spectrogram -o ".escapeshellarg($wprefix.basename($argv[2]).".png")."; ".$bin_sips." -s format jpeg -s formatOptions 80 ".escapeshellarg($wprefix.basename($argv[2]).".png")." --out ".$tprefix."sox-sips.jpg"; $cmd['sox_s'][] = $tprefix."sox-sips.jpg"; @@ -82,23 +88,23 @@ if ($mode == "thumb") { $cmd['qltool'][] = $bin_qltool." di ".$shellpath." ".$p['icon_size']." ".$p['icon_size']." | base64 --decode | ".$bin_convert." - -scale 50% -strip -define png:compression-level=9 ".$tprefix."qltool.png"; $cmd['qltool'][] = $tprefix."qltool.png"; - $cmd['qltool_q'][] = $bin_qltool." di ".$shellpath." ".$p['icon_size']." ".$p['icon_size']." | base64 --decode | ".$bin_convert." - -scale 50% - | ".$bin_pngquant." - -o ".$tprefix."qltool-quant.png"; - $cmd['qltool_q'][] = $tprefix."qltool-quant.png"; + $cmd['qltool_q'][] = $bin_qltool." di ".$shellpath." ".$p['icon_size']." ".$p['icon_size']." | base64 --decode | ".$bin_convert." - -scale 50% - | ".$bin_pngquant." - -o ".$tprefix."qltool_quant.png"; + $cmd['qltool_q'][] = $tprefix."qltool_quant.png"; - $cmd['ql-icon'][] = $bin_qlicon." --input=".$shellpath." --width=".$p['icon_size']." --height=".$p['icon_size']." --output=".$tprefix."qlicon.png"; - $cmd['ql-icon'][] = $tprefix."qlicon.png"; + $cmd['ql-icon'][] = $bin_qlicon." --input=".$shellpath." --width=".$p['icon_size']." --height=".$p['icon_size']." --output=".$tprefix."ql-icon.png"; + $cmd['ql-icon'][] = $tprefix."ql-icon.png"; - $cmd['ql-icon_q'][] = $bin_qlicon." --input=".$shellpath." --width=".$p['icon_size']." --height=".$p['icon_size']." | ".$bin_pngquant." - -o ".$tprefix."qlicon-quant.png"; - $cmd['ql-icon_q'][] = $tprefix."qlicon-quant.png"; + $cmd['ql-icon_q'][] = $bin_qlicon." --input=".$shellpath." --width=".$p['icon_size']." --height=".$p['icon_size']." | ".$bin_pngquant." - -o ".$tprefix."ql-icon_quant.png"; + $cmd['ql-icon_q'][] = $tprefix."ql-icon_quant.png"; - $cmd['qlmanage_sx'][] = $bin_qlmanage." -ti -s ".$p['icon_size']." -o ".$wprefix." ".$shellpath." ; mv ".escapeshellarg($wprefix.basename($argv[2]).".png")." ".$tprefix."qlmanage-size.png"; - $cmd['qlmanage_sx'][] = $tprefix."qlmanage-size.png"; + $cmd['qlmanage_sx'][] = $bin_qlmanage." -ti -s ".$p['icon_size']." -o ".$wprefix." ".$shellpath." ; mv ".escapeshellarg($wprefix.basename($argv[2]).".png")." ".$tprefix."qlmanage_size.png"; + $cmd['qlmanage_sx'][] = $tprefix."qlmanage_size.png"; - $cmd['qlmanage_fx'][] = $bin_qlmanage." -ti -f ".floor($p['icon_size']/128)." -o ".$wprefix." ".$shellpath." ; mv ".escapeshellarg($wprefix.basename($argv[2]).".png")." ".$tprefix."qlmanage-multiplier.png"; - $cmd['qlmanage_fx'][] = $tprefix."qlmanage-multiplier.png"; + $cmd['qlmanage_fx'][] = $bin_qlmanage." -ti -f ".floor($p['icon_size']/128)." -o ".$wprefix." ".$shellpath." ; mv ".escapeshellarg($wprefix.basename($argv[2]).".png")." ".$tprefix."qlmanage_multiplier.png"; + $cmd['qlmanage_fx'][] = $tprefix."qlmanage_multiplier.png"; - $cmd['qlmanage_zx'][] = $bin_qlmanage." -ti -F ".floor($p['icon_size']/64)." -o ".$wprefix." ".$shellpath." ; sips -z ".$p['icon_size']." ".$p['icon_size']." ".escapeshellarg($wprefix.basename($argv[2]).".png")." --out ".$tprefix."qlmanage-multiplier_large.png"; - $cmd['qlmanage_zx'][] = $tprefix."qlmanage-multiplier_large.png"; + $cmd['qlmanage_zx'][] = $bin_qlmanage." -ti -F ".floor($p['icon_size']/64)." -o ".$wprefix." ".$shellpath." ; sips -z ".$p['icon_size']." ".$p['icon_size']." ".escapeshellarg($wprefix.basename($argv[2]).".png")." --out ".$tprefix."qlmanage_multiplierlarge.png"; + $cmd['qlmanage_zx'][] = $tprefix."qlmanage_multiplierlarge.png"; } @@ -108,7 +114,7 @@ foreach ($cmd as $exec) { $start = microtime(true); echo $exec[0]."\n"; shell_exec($exec[0]); - $elapsed = substr((microtime(true)-$start),2,3); + $elapsed = substr((microtime(true)-$start),0,4); $ext = pathinfo($exec[1], PATHINFO_EXTENSION); $file = pathinfo($exec[1], PATHINFO_FILENAME); diff --git a/Yuba.app.zip b/Yuba.app.zip index 8165acffe0b495cc9c4524d655663d805344defe..2c9efec24170b305553e3acac6e6617b74e35908 100644 GIT binary patch delta 48089 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 n-MO1p3wTPTt63qYesD)gPo~5$ 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%0AB6nxQ%hm?A65(wa9fHhtKQDkT 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

rSDlX!T(#50_vm2KzJ8{IP5bom4<#S+ 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 B7pMRL diff --git a/Yuba.php b/Yuba.php index a6585fa..c17f1cd 100755 --- a/Yuba.php +++ b/Yuba.php @@ -38,7 +38,6 @@ require("filetypes.php"); $wopt_steps = 7; // total number of steps $wopt_currstep = 1; if ($p['debug']) { $wopt_clear = 0; } else { $wopt_clear = 1; } -$wopt_debug_unique = 0; $parser = new plistParser(); @@ -103,7 +102,7 @@ if (!is_dir($bdest)) { if (!mkdir($bdest,0777,true)) { echo "Error creating dest // Check for bundle if ($zpath == "/") { $blabel = "root"; } else { $blabel = preg_replace("/[^A-Za-z0-9\.]/", "_", basename($zpath)); } -if ($wopt_debug_unique) { $blabel .= "-".$mytime; } +if (!$p['reuse']) { $blabel .= "-".$mytime; } if (is_writable($zpath)) { echo "Warning: source is writeable\n"; } $bpath = chop($bdest,"/")."/".substr(crc32($zpath),0,3)."_".$blabel.".bundle"; @@ -228,10 +227,10 @@ $dbo = new PDO("sqlite:".$bpath."/".$stamp.".sqlite3"); $dbo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $dbo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); -//$dbo->query("PRAGMA page_size = 4096"); -//$dbo->query("PRAGMA cache_size = 10000"); -//$dbo->query("PRAGMA locking_mode = EXCLUSIVE"); -//$dbo->query("PRAGMA synchronous = NORMAL"); +$dbo->query("PRAGMA page_size = 4096"); +$dbo->query("PRAGMA cache_size = 10000"); +$dbo->query("PRAGMA synchronous = NORMAL"); +$dbo->query("PRAGMA locking_mode = NORMAL"); $dbo->query("PRAGMA journal_mode = WAL"); $dbo->exec("CREATE TABLE _skim ( @@ -399,20 +398,6 @@ if (!$passed_total) { echo msg("Total files: ".$passed_total.""); -// Pool DB -////////////////////////////////////////// - -$dbp = new PDO("sqlite:".$bpath."/pool.sqlite3"); - -$dbp->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); - -$dbp->exec("CREATE TABLE IF NOT EXISTS md5 (fid TEXT, hash TEXT)"); -$dbp->exec("CREATE TABLE IF NOT EXISTS exiftool (fid TEXT, tags TEXT)"); -$dbp->exec("CREATE TABLE IF NOT EXISTS mediainfo (fid TEXT, info TEXT)"); -$dbp->exec("CREATE TABLE IF NOT EXISTS thumbs (fid TEXT, created INTEGER, relative_path TEXT, width INTEGER, height INTEGER, tool TEXT)"); -$dbp->exec("CREATE TABLE IF NOT EXISTS icons (fid TEXT, hash TEXT, created INTEGER, relative_path TEXT, tool TEXT)"); -$dbp->exec("CREATE TABLE IF NOT EXISTS contents (fid TEXT, created INTEGER, relative_path TEXT)"); - // Prescan ////////////////////////////////////////// @@ -488,6 +473,7 @@ foreach ($files as $splFileInfo) { $parts[] = $splFileInfo->getType(); $parts[] = escapeshellarg($bpath); $parts[] = $mytime; + $parts[] = $p['spotlight']; $tcmd = implode(" ",$parts); //msg($tcmd); @@ -598,6 +584,26 @@ $wopt_currstep++; if ($p['spotlight']) { $dbo->exec("CREATE TABLE mdls (id INTEGER PRIMARY KEY,".implode(",",$cbuild).")"); } +// Pool DB +////////////////////////////////////////// + +$dbp = new PDO("sqlite:".$bpath."/pool.sqlite3"); + +$dbp->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); + +$dbp->query("PRAGMA page_size = 4096"); +$dbp->query("PRAGMA cache_size = 10000"); +$dbp->query("PRAGMA synchronous = NORMAL"); +$dbp->query("PRAGMA locking_mode = NORMAL"); +$dbp->query("PRAGMA journal_mode = WAL"); + +$dbp->exec("CREATE TABLE IF NOT EXISTS md5 (fid TEXT, hash TEXT)"); +$dbp->exec("CREATE TABLE IF NOT EXISTS exiftool (fid TEXT, tags TEXT)"); +$dbp->exec("CREATE TABLE IF NOT EXISTS mediainfo (fid TEXT, info TEXT)"); +$dbp->exec("CREATE TABLE IF NOT EXISTS thumbs (fid TEXT, created INTEGER, relative_path TEXT, width INTEGER, height INTEGER, tool TEXT)"); +$dbp->exec("CREATE TABLE IF NOT EXISTS icons (fid TEXT, hash TEXT, created INTEGER, relative_path TEXT, tool TEXT)"); +$dbp->exec("CREATE TABLE IF NOT EXISTS contents (fid TEXT, created INTEGER, relative_path TEXT)"); + // Helper ////////////////////////////////////////// @@ -625,8 +631,6 @@ $dbp->exec("CREATE INDEX IF NOT EXISTS mediainfo_index ON mediainfo (fid)"); $dbp->exec("CREATE INDEX IF NOT EXISTS thumbs_index ON thumbs (fid)"); $dbp->exec("CREATE INDEX IF NOT EXISTS icons_index ON icons (fid)"); -$dbo->exec("CREATE INDEX IF NOT EXISTS mdls_index ON mdls (id)"); - // Files ////////////////////////////////////////// diff --git a/YubaPrefs.php b/YubaPrefs.php index 168c243..efce623 100644 --- a/YubaPrefs.php +++ b/YubaPrefs.php @@ -19,6 +19,10 @@ function makeWindowString($p, $strings) { bdest.default = ".$p['bdest']." bdest.width = 380 + reuse.type = checkbox + reuse.label = Add to existing catalogs + reuse.default = ".$p['reuse']." + postflight.type = popup postflight.label = When finished postflight.option = ".$strings[0][0]." @@ -91,7 +95,6 @@ function makeWindowString($p, $strings) { thumb_mode.label = Mode thumb_mode.option = ".$strings[3][0]." thumb_mode.option = ".$strings[3][1]." - thumb_mode.option = ".$strings[3][2]." thumb_mode.default = ".$strings[3][$p['thumb_mode']]." thumb_mode.width = 120 thumb_mode.x = 150 @@ -210,7 +213,7 @@ if(!$p['bdest']) { $strings[] = array("Do nothing","Reveal result in Finder","Upload result with rsync","Open via localhost URL"); $strings[] = array("Skip","Collect","Collect & verify","Collect & repair atimes"); $strings[] = array("Skip","Generate","Rebuild"); -$strings[] = array("All files","Most files","Some files"); +$strings[] = array("Most files","Some files"); $strings[] = array("All files","Most files","Some files"); // Launch Pashua and parse results diff --git a/current_version.txt b/current_version.txt index f588047..e76123f 100755 --- a/current_version.txt +++ b/current_version.txt @@ -1 +1 @@ -0.8.0.1 \ No newline at end of file +0.8.0.2 \ No newline at end of file diff --git a/filetypes.php b/filetypes.php index 4d05393..8da943b 100755 --- a/filetypes.php +++ b/filetypes.php @@ -19,9 +19,9 @@ $bin_flacicon = escapeshellarg(__DIR__."/bin/flacicon"); $bin_flacdiricon = escapeshellarg(__DIR__."/bin/flacdiricon"); // System tools -$bin_php = "php"; -$bin_qlmanage = "qlmanage"; -$bin_sips = "sips"; +$bin_php = "/usr/bin/php"; +$bin_qlmanage = "/usr/bin/qlmanage"; +$bin_sips = "/usr/bin/sips"; // External tools $bin_vips = "/opt/local/bin/vipsthumbnail"; @@ -76,51 +76,59 @@ $p['c_files'] = array( "DS_Store", "doc", "docx" ); -// Use ffmpeg to generate thumbnails for these files -$p['t_files']['ffmpeg'] = array( "mkv", - "avi", - "mpeg", - "mpg", - "vob", - "mp4", - "m4v", - "m2v", - "m2ts", - "asf", - "wmv", - "rm", - "divx", - "fla", - "flv", - "webm" ); +// Thumbnail bindings + +$p['t_b']['mkv'] = array("ql-thumbnail","ffmpeg"); +$p['t_b']['avi'] = array("ql-thumbnail","ffmpeg"); +$p['t_b']['mpeg'] = array("ql-thumbnail","ffmpeg"); +$p['t_b']['mpg'] = array("ql-thumbnail","ffmpeg"); +$p['t_b']['vob'] = array("ql-thumbnail","ffmpeg"); +$p['t_b']['mp4'] = array("ql-thumbnail","ffmpeg"); +$p['t_b']['m4v'] = array("ql-thumbnail","ffmpeg"); +$p['t_b']['m2v'] = array("ql-thumbnail","ffmpeg"); +$p['t_b']['m2ts'] = array("ql-thumbnail","ffmpeg"); +$p['t_b']['asf'] = array("ql-thumbnail","ffmpeg"); +$p['t_b']['wmv'] = array("ql-thumbnail","ffmpeg"); +$p['t_b']['rm'] = array("ql-thumbnail","ffmpeg"); +$p['t_b']['divx'] = array("ql-thumbnail","ffmpeg"); +$p['t_b']['fla'] = array("ql-thumbnail","ffmpeg"); +$p['t_b']['flv'] = array("ql-thumbnail","ffmpeg"); +$p['t_b']['webm'] = array("ql-thumbnail","ffmpeg"); -// Use sips to generate thumbnails for these files -// SIPS does not currently support JPEG Orientation EXIF Tag, -// so images will sometimes appear sideways -//$p['t_files']['sips'] = array( "jpg", -// "jpeg", -// "tif", -// "tiff", -// "gif", -// "psd", -// "png", -// "heic", -// "pdf", -// "ai", -// "ps", -// "bmp", -// "pict", -// "jp2" ); +$p['t_b']['jpg'] = array("sips","ql-thumbnail","vips"); +$p['t_b']['jpeg'] = array("sips","ql-thumbnail","vips"); +$p['t_b']['png'] = array("sips","ql-thumbnail","vips"); -// Use sox to generate thumbnails for these files -$p['t_files']['sox'] = array( "flac", - "wav", - "aif", - "aiff" ); +$p['t_b']['tif'] = array("vips","sips","ql-thumbnail"); +$p['t_b']['tiff'] = array("vips","sips","ql-thumbnail"); -// Don't make thumbnails for these files -$p['t_skip'] = array( "emlx", - "DS_Store" ); +$p['t_b']['nik'] = array("ql-thumbnail","sips","vips"); +$p['t_b']['dng'] = array("ql-thumbnail","sips","vips"); +$p['t_b']['gif'] = array("ql-thumbnail","sips","vips"); +$p['t_b']['psd'] = array("ql-thumbnail","sips","vips"); +$p['t_b']['heic'] = array("ql-thumbnail","sips","vips"); +$p['t_b']['pdf'] = array("ql-thumbnail","sips","vips"); +$p['t_b']['ai'] = array("ql-thumbnail","sips","vips"); +$p['t_b']['ps'] = array("ql-thumbnail","sips","vips"); +$p['t_b']['bmp'] = array("ql-thumbnail","sips","vips"); +$p['t_b']['pict'] = array("ql-thumbnail","sips","vips"); +$p['t_b']['jp2'] = array("ql-thumbnail","sips","vips"); + +$p['t_b']['flac'] = array("sox"); +$p['t_b']['wav'] = array("sox"); +$p['t_b']['aif'] = array("sox"); +$p['t_b']['aiff'] = array("sox"); +$p['t_b']['au'] = array("sox"); +$p['t_b']['wv'] = array("sox"); +$p['t_b']['snd'] = array("sox"); +$p['t_b']['voc'] = array("sox"); + +$p['t_b']['mp3'] = array("sox","ql-thumbnail"); +$p['t_b']['m4a'] = array("sox","ql-thumbnail"); +$p['t_b']['m4b'] = array("sox","ql-thumbnail"); +$p['t_b']['ogg'] = array("sox","ql-thumbnail"); + +$p['t_b']['*'] = "ql-thumbnail"; // Don't make icons for these files $p['i_skip'] = array( "jpg", @@ -136,6 +144,16 @@ $p['i_skip'] = array( "jpg", "aif", "zip", "DS_Store" ); + +// Make sox preview icons for these files +$p['i_sox'] = array( "flac", + "wav", + "aif", + "aiff", + "au", + "wv", + "snd", + "voc" ); // Run mediainfo on these files $p['m_files'] = array( "mkv", @@ -240,10 +258,8 @@ foreach ($p['bundles'] as $bundle) { $p['nodescend'][] = "*.".$bundle; } foreach ($p['c_files'] as $ext) { $p['c_files'][] = strtoupper($ext); } foreach ($p['e_files'] as $ext) { $p['e_files'][] = strtoupper($ext); } foreach ($p['m_files'] as $ext) { $p['m_files'][] = strtoupper($ext); } -foreach ($p['t_files']['ffmpeg'] as $ext) { $p['t_files']['ffmpeg'][] = strtoupper($ext); } -//foreach ($p['t_files']['sips'] as $ext) { $p['t_files']['sips'][] = strtoupper($ext); } -foreach ($p['t_skip'] as $ext) { $p['t_skip'][] = strtoupper($ext); } foreach ($p['i_skip'] as $ext) { $p['i_skip'][] = strtoupper($ext); } +foreach ($p['i_sox'] as $ext) { $p['i_sox'][] = strtoupper($ext); } foreach ($p['p_files'] as $file) { $p['p_files'][] = strtoupper($file); } // Spotlight ////////////////////////////////////////// @@ -289,4 +305,10 @@ foreach (array_merge($mb['t'],$mb['a']) as $item) { unset($item); +// Album dirs ////////////////////////////////////////// + +$p['album_files'] = array("flac","mp3","mp4","wav","ogg","aiff","aif"); +$p['cover_files'] = array("cover","folder","front","dir"); +$p['cover_exts'] = array("jpg","jpeg","png"); + ?> \ No newline at end of file diff --git a/functions.php b/functions.php index bfe0744..348a613 100755 --- a/functions.php +++ b/functions.php @@ -76,6 +76,33 @@ class ProgressBar { // Functions ////////////////////////////////////////// +function globext($array) { + $globparts = array(); + foreach ($array as $ext) { + $globstring = ""; + $parts = str_split($ext); + foreach ($parts as $char) { + $globstring .= "[".$char.strtoupper($char)."]"; + } + $globparts[] = $globstring; + } + return "{".implode(",",$globparts)."}"; + } + +function globstring($array,$base = "*") { + if (!is_array($base)) { + return $base.".".globext($array); + } else { + $globparts = array(); + foreach ($base as $file) { + $globparts[] = $file; + $globparts[] = strtoupper($file); + $globparts[] = ucfirst($file); + } + return "{".implode(",",$globparts)."}".".".globext($array); + } + } + function revise_prefs($array) { // bad practice $prefs_file = "/Users/".get_current_user()."/Library/Preferences/org.profiteroles.Yuba.php"; $p = unserialize(file_get_contents($prefs_file)); @@ -182,7 +209,7 @@ function shortlabel($pathname, $max = 99) { } else { $return = $basename; } - return $return; + return str_replace("\r","",$return); // filter out weird carriage returns in Icon filenames } function human_filesize($bytes, $decimals = 2) { diff --git a/helper.php b/helper.php index c792600..413598b 100755 --- a/helper.php +++ b/helper.php @@ -13,9 +13,6 @@ $p = unserialize(file_get_contents($prefs_file)); require("functions.php"); require("filetypes.php"); -$redirect = "2>&1"; -//$redirect = "2> /tmp/yuba/debug.log"; - $dm = ""; function dfm ($string, $flag = 0) { // dumb workaround for debug messages appearing out of order @@ -39,6 +36,7 @@ $pathname = $argv[4]; $pid = md5($pathname); $shellpath = escapeshellarg($pathname); $ext = pathinfo($pathname,PATHINFO_EXTENSION); +$extl = strtolower($ext); $file = pathinfo($pathname, PATHINFO_BASENAME); $btype = $argv[5]; $bpath = $argv[6]; @@ -48,6 +46,13 @@ $parser = new plistParser(); $stamp = date("Y-m-d_H-i-s", $mytime); $messages_log_file = $bpath."/".$stamp."_messages.log"; +$error_log_file = $bpath."/".$stamp."_error.log"; + +if ($p['debug']) { + $redirect = "2>&1 | tee -a /tmp/yuba/debug.log"; + } else { + $redirect = "2>> ".$error_log_file; + } $tmpdir = "/tmp/yuba/".$mytime; if (!is_dir($tmpdir)) { mkdir($tmpdir,0777,true); dfm("mkdir ",$tmpdir); } @@ -58,10 +63,10 @@ $dbo = new PDO("sqlite:".$bpath."/".$stamp.".sqlite3"); $dbo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $dbo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); -//$dbo->query("PRAGMA page_size = 4096"); -//$dbo->query("PRAGMA cache_size = 10000"); -//$dbo->query("PRAGMA locking_mode = EXCLUSIVE"); -//$dbo->query("PRAGMA synchronous = NORMAL"); +$dbo->query("PRAGMA page_size = 4096"); +$dbo->query("PRAGMA cache_size = 10000"); +$dbo->query("PRAGMA synchronous = NORMAL"); +$dbo->query("PRAGMA locking_mode = NORMAL"); $dbo->query("PRAGMA journal_mode = WAL"); // Pool DB @@ -70,10 +75,10 @@ $dbp = new PDO("sqlite:".$bpath."/pool.sqlite3"); $dbp->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $dbp->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); -//$dbp->query("PRAGMA page_size = 4096"); -//$dbp->query("PRAGMA cache_size = 10000"); -//$dbp->query("PRAGMA locking_mode = EXCLUSIVE"); -//$dbp->query("PRAGMA synchronous = NORMAL"); +$dbp->query("PRAGMA page_size = 4096"); +$dbp->query("PRAGMA cache_size = 10000"); +$dbp->query("PRAGMA synchronous = NORMAL"); +$dbo->query("PRAGMA locking_mode = NORMAL"); $dbp->query("PRAGMA journal_mode = WAL"); $sbatch = array(); @@ -91,10 +96,11 @@ if ($p['thumbs'] && $btype == "file" && $ext != "DS_Store") { $estring .= " THUMBS"; - // "bad" filesizes from generic icons + // "bad" filesizes from generic audio file icons $discard = array( 3953, 4977, 5019, + 7133, 6059, 6616, 17393 ); @@ -105,10 +111,10 @@ if ($p['thumbs'] && $btype == "file" && $ext != "DS_Store") { if (!is_dir(dirname($tfile))) { @mkdir(dirname($tfile),0777,true); dfm("mkdir ".dirname($tfile)); } - if ($p['thumb_mode'] != 0 && in_array($ext, $p['t_skip'])) { + if ($ext == "DS_Store") { // file extension is in the skip list $estring .= " ->t_skip"; - dfm("file extension is in the skip list"); + dfm("skipping ds_store"); goto icons; } @@ -152,41 +158,47 @@ if ($p['thumbs'] && $btype == "file" && $ext != "DS_Store") { $cmd['vips'] = $bin_vips." ".$shellpath." -o ".$tfile."[Q=90,optimize_coding] --size=".$p['thumb_size']; $cmd['sox'] = $bin_sox." ".$shellpath." -n trim 0 $(".$bin_exiftool." -s -s -s -duration# ".$shellpath." | awk '{print $1/4}') spectrogram -r -o - | ".$bin_convert." - -quality 85% ".$tfile; - $cmd['ffmpeg'] = $bin_ffmpeg." -ss $(( $(".$bin_mediainfo." --Inform='Video;%Duration%' ".$shellpath." | cut -d'.' -f1) / 10000 )) -i ".$shellpath." -vframes 1 -filter:v scale='400:-1' -q:v 3 ".$tfile; + $cmd['ffmpeg'] = $bin_ffmpeg." -ss $(( $(".$bin_mediainfo." --Inform='Video;%Duration%' ".$shellpath." | cut -d'.' -f1) / 10000 )) -i ".$shellpath." -vframes 1 -filter:v scale='".$p['thumb_size'].":-1' -q:v 3 ".$tfile; $cmd['ql-thumbnail'] = $bin_qlthumb." ".$shellpath." ".$tfile." public.jpeg ".$p['thumb_size']." ".$p['thumb_size']." .8"; $cmd['qlmanage'] = $bin_qlmanage." -t -s ".$p['thumb_size']." -o ".dirname($tpfile)." ".$shellpath."; ".$bin_sips." -s format jpeg -s formatOptions 80 ".escapeshellarg($tpfile)." --out ".$tfile; - $external_tool = null; - foreach ($p['t_files'] as $tool => $whitelist) { - if (in_array($ext, $whitelist)) { - $external_tool = $tool; - } - } - dfm("external tool for ".$ext." = ".$external_tool); switch ($p['thumb_mode']) { - case 0: $priority = array($external_tool,"ql-thumbnail","qlmanage"); break; - case 1: $priority = array("ql-thumbnail","qlmanage"); break; - case 2: $priority = array("ql-thumbnail"); break; + case 0: // most files + if (!empty($p['t_b'][$extl])) { + $priority = $p['t_b'][$extl]; + } else { + $priority = $p['t_b']['*']; + } + break; + case 1: // some files + if (!empty($p['t_b'][$extl]) && !in_array($p['t_b']['*'],$p['t_b'][$extl])) { + $priority = $p['t_b']['*']; + } else { + $priority = null; + } + break; } dfm("thumb mode ".$p['thumb_mode']); - dfm("priority for ".$ext." is: ".print_r($priority,true)); + dfm("priority for ".$extl." is: ".print_r($priority,true)); $stmt->BindValue(":fid",$fid); $stmt->BindValue(":created",time()); + if (!is_array($priority)) { $priority = array($priority); } + foreach ($priority as $tool) { if (empty($cmd[$tool])) { continue; } dfm($cmd[$tool]); - shell_exec($cmd[$tool]." 2>1"); + shell_exec("( ".$cmd[$tool]." ) ".$redirect); $estring .= " ->".$tool; $checksize = @filesize($tfile); if ($checksize) { - if (!empty($discard) && in_array($checksize,$discard)) { - $estring .= " ->discard"; + if (in_array($checksize,$discard)) { + $estring .= " ->bdiscard"; dfm($checksize." is in the banned size array"); } else { $estring .= " ->use"; @@ -204,7 +216,7 @@ if ($p['thumbs'] && $btype == "file" && $ext != "DS_Store") { } } else { $estring .= " ->discard"; - dfm($tool." produced a bad file (size=".$checksize.")"); + dfm($tool." did not produce a file"); } } @@ -218,13 +230,14 @@ if ($p['thumbs'] && $btype == "file" && $ext != "DS_Store") { // Icons ////////////////////////////////////////// icons: -if ($p['icons'] && ($btype == "file" || $btype == "dir") && $ext != "DS_Store") { - +//if ($p['icons'] && ($btype == "file" || $btype == "dir") && $ext != "DS_Store") { +if ($p['icons'] && $ext != "DS_Store") { + dfm("ICONS",1); $estring .= " ICONS"; - if ($p['icon_mode'] != 0 && in_array($ext, $p['i_skip'])) { + if ($p['icon_mode'] != 0 && in_array($extl, $p['i_skip'])) { $estring .= " ->i_skip"; dfm("file extension is in the skip list"); goto meta; @@ -257,7 +270,6 @@ if ($p['icons'] && ($btype == "file" || $btype == "dir") && $ext != "DS_Store") } - $cmd['flacdiricon'] = $bin_flacdiricon." ".$shellpath." ".$p['icon_size']." ".$tfile; $cmd['flacicon'] = $bin_flacicon." ".$shellpath." ".$p['icon_size']." ".$tfile; $cmd['ql-icon'] = $bin_qlicon." --input=".$shellpath." --width=".$p['icon_size']." --height=".$p['icon_size']." | ".$bin_pngquant." - -o ".$tfile; $cmd['qltool'] = $bin_qltool." di ".$shellpath." ".$p['icon_size']." ".$p['icon_size']." | base64 --decode | ".$bin_convert." - -scale 50% - | ".$bin_pngquant." - -o ".$tfile; @@ -266,7 +278,7 @@ if ($p['icons'] && ($btype == "file" || $btype == "dir") && $ext != "DS_Store") dfm("icon mode 2, bypassing hash check"); $tool = "ql-icon"; - shell_exec($cmd[$tool]." ".$redirect); + shell_exec("( ".$cmd[$tool]." ) ".$redirect); $stmt->BindValue(":tool",$tool); dfm($cmd[$tool]); $estring .= " ->".$tool; @@ -289,22 +301,39 @@ if ($p['icons'] && ($btype == "file" || $btype == "dir") && $ext != "DS_Store") } else { + $gfind = array("[","]","{","}"); + $greplace = array("\[","\]","\{","\}"); + $globsafe = str_replace($gfind,$greplace,$pathname); + if ($btype == "dir") { + dfm($pathname." is a dir, proceeding with directory check"); $stmt->BindValue(":fid",$pid); - $tools = array("flacdiricon","qltool"); + if (file_exists($pathname."/Icon\r")) { + dfm("Custom icon found, processing ".$pathname." with qltool"); + $tools = array("qltool"); + } elseif (glob($globsafe."/".globstring($p['album_files']),GLOB_BRACE) && $test = glob($globsafe."/".globstring($p['cover_exts'],$p['cover_files']),GLOB_BRACE)) { + dfm("Album files and cover found, processing ".$pathname." with flacdiricon"); + $cmd['flacdiricon'] = $bin_flacdiricon." ".$shellpath." ".$p['icon_size']." ".escapeshellarg(array_shift($test))." ".$tfile; + $tools = array("flacdiricon"); + } else { + dfm("glob ".$pathname."/".globstring($p['album_files'])); + dfm("glob ".$pathname."/".globstring($p['cover_exts'],$p['cover_files'])); + dfm("Nothing found, skipping ".$pathname); + $tools = array(); + } } else { $stmt->BindValue(":fid",$fid); - if ($ext == "flac") { + if (in_array($extl, $p['i_sox'])) { $tools = array("flacicon","ql-icon","qltool"); } else { $tools = array("ql-icon","qltool"); } } - unset($mytool); + $mytool = ""; foreach ($tools as $tool) { if (!@filesize($tfile)) { - shell_exec($cmd[$tool]." ".$redirect); + shell_exec("( ".$cmd[$tool]." ) ".$redirect); dfm($cmd[$tool]); $estring .= " ->".$tool; $mytool = $tool; @@ -347,8 +376,12 @@ if ($p['icons'] && ($btype == "file" || $btype == "dir") && $ext != "DS_Store") } else { - $estring .= " ->discard"; - dfm($mytool." produced a bad file (size=".$checksize.")"); + if (empty($tools)) { + $estring .= " ->gskip"; + } else { + $estring .= " ->discard"; + } + dfm("tool = ".$mytool." produced a bad file (size=".$checksize.")"); } @@ -369,13 +402,13 @@ if ($p['meta'] && $btype == "file" && $ext != "DS_Store") { $estring .= " META"; - if (!in_array($ext, $p['e_files']) && !in_array($ext, $p['m_files'])) { + if (!in_array($extl, $p['e_files']) && !in_array($extl, $p['m_files'])) { $estring .= " ->notmedia"; - dfm("file extension ".$ext." is not a media file"); + dfm("file extension ".$extl." is not a media file"); goto hashy; } - if (in_array($ext, $p['e_files'])) { + if (in_array($extl, $p['e_files'])) { $sql = "SELECT EXISTS(SELECT 1 FROM exiftool WHERE fid='".$fid."')"; dfm($sql); $check = @$dbp->query($sql)->fetch(); @@ -398,7 +431,7 @@ if ($p['meta'] && $btype == "file" && $ext != "DS_Store") { } } - if (in_array($ext, $p['m_files'])) { + if (in_array($extl, $p['m_files'])) { $sql = "SELECT EXISTS(SELECT 1 FROM mediainfo WHERE fid='".$fid."')"; dfm($sql); $check = @$dbp->query($sql)->fetch(); @@ -406,7 +439,7 @@ if ($p['meta'] && $btype == "file" && $ext != "DS_Store") { dfm("creating mediainfo dump"); $stmt = $dbp->prepare("INSERT INTO mediainfo VALUES (:fid, :info)"); $stmt->BindValue(":fid",$fid); - $stmt->BindValue(":info",shell_exec($bin_mediainfo." --Output=JSON ".$shellpath." ".$redirect)); + $stmt->BindValue(":info",shell_exec("( ".$bin_mediainfo." --Output=JSON ".$shellpath." ) ".$redirect)); $sbatch[] = $stmt; $estring .= " ->minfo"; } else { @@ -462,7 +495,7 @@ if ($p['contents'] && $btype == "file") { $cpath = $bpath."/contents/".substr($fid, 0, 2); $cfile = $cpath."/".$fid.".zip"; - if (in_array($ext, $p['c_files'])) { + if (in_array($extl, $p['c_files'])) { $max_size = $p['contents_limit'] * 1000; if ($ext == ".DS_Store") { // store all DS_Store files no matter how big @@ -496,7 +529,7 @@ if ($p['contents'] && $btype == "file") { // Spotlight ////////////////////////////////////////// -if ($p['spotlight']) { +if (@$argv[8]) { dfm("SPOTLIGHT",1); $estring .= " SPOTLIGHT"; diff --git a/prefs.php b/prefs.php index aaa81c4..13f62f1 100644 --- a/prefs.php +++ b/prefs.php @@ -1 +1 @@ -a:20:{s:5:"bdest";s:0:"";s:10:"rsync_dest";s:0:"";s:10:"postflight";i:1;s:11:"readability";i:0;s:9:"stat_mode";i:1;s:4:"meta";i:1;s:6:"thumbs";i:1;s:10:"thumb_size";i:512;s:10:"thumb_mode";i:0;s:5:"icons";i:1;s:9:"icon_size";i:256;s:9:"icon_mode";i:0;s:4:"hash";i:1;s:10:"hash_limit";i:1;s:8:"contents";i:1;s:14:"contents_limit";i:50;s:9:"spotlight";i:1;s:7:"profile";i:1;s:8:"parallel";i:1;s:5:"debug";i:0;} \ No newline at end of file +a:21:{s:5:"bdest";s:0:"";s:10:"rsync_dest";s:0:"";s:10:"postflight";i:1;s:11:"readability";i:0;s:9:"stat_mode";i:1;s:4:"meta";i:1;s:6:"thumbs";i:1;s:10:"thumb_size";i:512;s:10:"thumb_mode";i:0;s:5:"icons";i:1;s:9:"icon_size";i:256;s:9:"icon_mode";i:0;s:4:"hash";i:1;s:10:"hash_limit";i:1;s:8:"contents";i:1;s:14:"contents_limit";i:50;s:9:"spotlight";i:1;s:7:"profile";i:1;s:8:"parallel";i:1;s:5:"debug";i:0;s:5:"reuse";i:1;} \ No newline at end of file diff --git a/web/rtc.php b/web/rtc.php index f4c0fd1..fc3e920 100644 --- a/web/rtc.php +++ b/web/rtc.php @@ -852,7 +852,7 @@ if ($db_file) { foreach ($sorted_bundles as $row) { foreach ($row as $bundle) { - echo "