From a344259e402a6e623fc67643a481fcc402ae7a66 Mon Sep 17 00:00:00 2001 From: profiteroles Date: Tue, 15 Oct 2019 18:32:21 -0700 Subject: [PATCH] 0.8.0.0 --- CHANGELOG.md | 4 + README.md | 2 +- Tester.zip | Bin 68638840 -> 68649084 bytes Tester/Tester.php | 21 +- Yuba.app.zip | Bin 43866128 -> 43871421 bytes Yuba.php | 23 +- YubaPrefs.php | 69 +++-- current_version.txt | 2 +- filetypes.php | 11 +- functions.php | 4 +- helper.php | 292 ++++++++++-------- prefs.php | 2 +- web/rtc.php | 98 +++--- web/{icons => yicons}/3dm.png | Bin web/{icons => yicons}/abbu.png | Bin web/{icons => yicons}/aep.png | Bin web/{icons => yicons}/ai.png | Bin web/{icons => yicons}/aif.png | Bin web/{icons => yicons}/aiff.png | Bin web/{icons => yicons}/aplibrary.png | Bin web/{icons => yicons}/app.png | Bin web/{icons => yicons}/apvault.png | Bin web/{icons => yicons}/avi.png | Bin web/{icons => yicons}/bdmv.png | Bin web/{icons => yicons}/bundle.png | Bin web/{icons => yicons}/directory.png | Bin web/{icons => yicons}/directory_alias.png | Bin web/{icons => yicons}/directory_invisible.png | Bin web/{icons => yicons}/disc.png | Bin web/{icons => yicons}/dmg.png | Bin web/{icons => yicons}/dwg.png | Bin web/{icons => yicons}/dxf.png | Bin web/{icons => yicons}/eps.png | Bin web/{icons => yicons}/firewire.png | Bin web/{icons => yicons}/flac.png | Bin web/{icons => yicons}/framework.png | Bin web/{icons => yicons}/gz.png | Bin web/{icons => yicons}/home.png | Bin web/{icons => yicons}/html.png | Bin web/{icons => yicons}/image.png | Bin web/{icons => yicons}/internal.png | Bin web/{icons => yicons}/iso.png | Bin web/{icons => yicons}/kext.png | Bin web/{icons => yicons}/m2ts.png | Bin web/{icons => yicons}/m4a.png | Bin web/{icons => yicons}/m4v.png | Bin web/{icons => yicons}/mask.png | Bin web/{icons => yicons}/mkv.png | Bin web/{icons => yicons}/mp3.png | Bin web/{icons => yicons}/mp4.png | Bin web/{icons => yicons}/music_null.png | Bin web/{icons => yicons}/null.png | Bin web/{icons => yicons}/null_alias.png | Bin web/{icons => yicons}/null_invisible.png | Bin web/{icons => yicons}/overlay.png | Bin web/{icons => yicons}/pdf.png | Bin web/{icons => yicons}/photoslibrary.png | Bin web/{icons => yicons}/pkg.png | Bin web/{icons => yicons}/plist.png | Bin web/{icons => yicons}/plugin.png | Bin web/{icons => yicons}/psd.png | Bin web/{icons => yicons}/rar.png | Bin web/{icons => yicons}/rtf.png | Bin web/{icons => yicons}/rtfd.png | Bin web/{icons => yicons}/scpt.png | Bin web/{icons => yicons}/sh.png | Bin web/{icons => yicons}/sparsebundle.png | Bin web/{icons => yicons}/sparseimage.png | Bin web/{icons => yicons}/srt.png | Bin web/{icons => yicons}/tar.png | Bin web/{icons => yicons}/trash_empty.png | Bin web/{icons => yicons}/trash_full.png | Bin web/{icons => yicons}/vob.png | Bin web/{icons => yicons}/wav.png | Bin web/{icons => yicons}/webloc.png | Bin web/{icons => yicons}/wmv.png | Bin web/{icons => yicons}/zip.png | Bin 77 files changed, 308 insertions(+), 220 deletions(-) rename web/{icons => yicons}/3dm.png (100%) rename web/{icons => yicons}/abbu.png (100%) rename web/{icons => yicons}/aep.png (100%) rename web/{icons => yicons}/ai.png (100%) rename web/{icons => yicons}/aif.png (100%) rename web/{icons => yicons}/aiff.png (100%) rename web/{icons => yicons}/aplibrary.png (100%) rename web/{icons => yicons}/app.png (100%) rename web/{icons => yicons}/apvault.png (100%) rename web/{icons => yicons}/avi.png (100%) rename web/{icons => yicons}/bdmv.png (100%) rename web/{icons => yicons}/bundle.png (100%) rename web/{icons => yicons}/directory.png (100%) rename web/{icons => yicons}/directory_alias.png (100%) rename web/{icons => yicons}/directory_invisible.png (100%) rename web/{icons => yicons}/disc.png (100%) rename web/{icons => yicons}/dmg.png (100%) rename web/{icons => yicons}/dwg.png (100%) rename web/{icons => yicons}/dxf.png (100%) rename web/{icons => yicons}/eps.png (100%) rename web/{icons => yicons}/firewire.png (100%) rename web/{icons => yicons}/flac.png (100%) rename web/{icons => yicons}/framework.png (100%) rename web/{icons => yicons}/gz.png (100%) rename web/{icons => yicons}/home.png (100%) rename web/{icons => yicons}/html.png (100%) rename web/{icons => yicons}/image.png (100%) rename web/{icons => yicons}/internal.png (100%) rename web/{icons => yicons}/iso.png (100%) rename web/{icons => yicons}/kext.png (100%) rename web/{icons => yicons}/m2ts.png (100%) rename web/{icons => yicons}/m4a.png (100%) rename web/{icons => yicons}/m4v.png (100%) rename web/{icons => yicons}/mask.png (100%) rename web/{icons => yicons}/mkv.png (100%) rename web/{icons => yicons}/mp3.png (100%) rename web/{icons => yicons}/mp4.png (100%) rename web/{icons => yicons}/music_null.png (100%) rename web/{icons => yicons}/null.png (100%) rename web/{icons => yicons}/null_alias.png (100%) rename web/{icons => yicons}/null_invisible.png (100%) rename web/{icons => yicons}/overlay.png (100%) rename web/{icons => yicons}/pdf.png (100%) rename web/{icons => yicons}/photoslibrary.png (100%) rename web/{icons => yicons}/pkg.png (100%) rename web/{icons => yicons}/plist.png (100%) rename web/{icons => yicons}/plugin.png (100%) rename web/{icons => yicons}/psd.png (100%) rename web/{icons => yicons}/rar.png (100%) rename web/{icons => yicons}/rtf.png (100%) rename web/{icons => yicons}/rtfd.png (100%) rename web/{icons => yicons}/scpt.png (100%) rename web/{icons => yicons}/sh.png (100%) rename web/{icons => yicons}/sparsebundle.png (100%) rename web/{icons => yicons}/sparseimage.png (100%) rename web/{icons => yicons}/srt.png (100%) rename web/{icons => yicons}/tar.png (100%) rename web/{icons => yicons}/trash_empty.png (100%) rename web/{icons => yicons}/trash_full.png (100%) rename web/{icons => yicons}/vob.png (100%) rename web/{icons => yicons}/wav.png (100%) rename web/{icons => yicons}/webloc.png (100%) rename web/{icons => yicons}/wmv.png (100%) rename web/{icons => yicons}/zip.png (100%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 68bf85e..61a7215 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,10 @@ # Changelog All notable changes to this project will be documented in this file. Older changes are summarized on individual commits. +## [0.8.0.0] +- Rewrite icon generation +- Open in browser postflight + ## [0.7.13.2] - Added PHP extension checks - Moved icon, thumb, meta, contents into helper diff --git a/README.md b/README.md index 114c162..8d651ba 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.7.13.2](https://www.profiteroles.org/git/p/Yuba/raw/master/Yuba.app.zip) ([Changelog](CHANGELOG.md)) +####[⇩ Download Yuba 0.8.0.0](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 9c03815e9eb46335559aa6b0d2e6d7520474e2de..f4267380577dd9056a6648a24fed0b74a935e664 100644 GIT binary patch delta 38942 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
_EBA}Y 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 ".$tprefix."qlicon-quant.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['qlmanage_sx'][] = $bin_qlmanage." -ti -s ".$p['icon_size']." -o ".$wprefix." ".$shellpath." ; mv ".escapeshellarg($wprefix.basename($argv[2]).".png")." ".$tprefix."qlmanage-size.png"; @@ -105,6 +116,7 @@ foreach ($cmd as $exec) { if(!filesize($exec[1])) { echo "NO RESULT\n"; + unlink($exec[1]); } else { rename($exec[1],$dir."/".$i."_".$file."_".$elapsed."msec.".$ext); } @@ -113,5 +125,6 @@ foreach ($cmd as $exec) { } shell_exec("qlmanage -p ".$tprefix."/* > /dev/null 2>&1"); +shell_exec("open ".$tprefix); ?> \ No newline at end of file diff --git a/Yuba.app.zip b/Yuba.app.zip index 9292b5ed141ec0487cd45b21ca93a4012cd135f8..b96981b9e67e0afcacbc91949eafa23c5a2e0bd2 100644 GIT binary patch delta 46494 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
Nu^sN;W1Zf^1w-|^6I0I&VIootgIlM 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

$V+x~Vzk02H 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 delta 41301 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�SI=Bmg7`Bm^W3BmyJ~ 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 diff --git a/Yuba.php b/Yuba.php index 12e4a1b..5e3eb4f 100755 --- a/Yuba.php +++ b/Yuba.php @@ -38,6 +38,7 @@ require("filetypes.php"); $wopt_steps = 8; // total number of steps $wopt_currstep = 1; if ($p['debug']) { $wopt_clear = 0; } else { $wopt_clear = 1; } +$wopt_debug_unique = 0; $parser = new plistParser(); @@ -98,10 +99,11 @@ if ($p['contents'] && !extension_loaded("zip")) { if (!isset($argv[1]) || $argv[1] == "") { echo "No input"; die; } $zpath = realpath(@$argv[1]); if ($p['bdest']) { $bdest = realpath($p['bdest']); } else { $bdest = "/Users/".get_current_user()."/Documents/Yuba/"; } -if (!is_dir($bdest)) { if (!mkdir($bdest)) { echo "Error creating directory: ".$bdest; die; } } +if (!is_dir($bdest)) { if (!mkdir($bdest,0777,true)) { echo "Error creating destination directory"; die; } } // Check for bundle if ($zpath == "/") { $blabel = "root"; } else { $blabel = preg_replace("/[^A-Za-z0-9\.]/", "_", basename($zpath)); } +if ($wopt_debug_unique) { $blabel .= "-".$mytime; } if (is_writable($zpath)) { echo "Warning: source is writeable\n"; } $bpath = chop($bdest,"/")."/".substr(crc32($zpath),0,3)."_".$blabel.".bundle"; @@ -660,12 +662,12 @@ foreach (array_merge($mb['t'],$mb['a']) as $item) { $ibuild[] = ":".$item; } +$dbo->exec("CREATE TABLE mdls (".implode(",",$cbuild).")"); + if ($p['spotlight']) { echo ProgressBar::start($passed_total,"Spotlight (".stepString().")"); - $dbo->exec("CREATE TABLE mdls (".implode(",",$cbuild).")"); - foreach ($files as $splFileInfo) { $path = $splFileInfo->getPathname(); @@ -887,7 +889,7 @@ foreach ($files as $splFileInfo) { } elseif ($type == "dir") { - if (@is_array($dpreview) && $dpreview[$pathname]) { + if (is_array($dpreview) && @$dpreview[$pathname]) { $fetch_thumb = $dbp->query("SELECT * FROM thumbs WHERE fid='".$dpreview[$pathname]."'")->fetch(); if (@$fetch_thumb['relative_path']) { $stmt->BindValue(":thumb_filename",$fetch_thumb['relative_path']); @@ -1036,9 +1038,11 @@ while ($row_a = $loop->fetch()) { } $m['m']['SkimTrackCount'] = @count($m_base); - foreach (@$m_base as $track) { - if (!@$m['m']['SkimDims'] && @$track['Width'] && @$track['Height']) { - $m['m']['SkimDims'] = @sanitize($track['Width'],"i").$display_delimiter.@sanitize($track['Height'],"i"); + if (is_array($m_base)) { + foreach (@$m_base as $track) { + if (!@$m['m']['SkimDims'] && @$track['Width'] && @$track['Height']) { + $m['m']['SkimDims'] = @sanitize($track['Width'],"i").$display_delimiter.@sanitize($track['Height'],"i"); + } } } @@ -1108,7 +1112,10 @@ $dbo->exec("UPDATE _skim SET status='completed_in_".$seconds."'"); // rsync -if ($p['postflight'] == 2 && $p['rsync_dest']) { +if ($p['postflight'] == 3) { + $url = "http://localhost/rtc.php?db=data/".basename($bpath)."/".$stamp.".sqlite3"; + exec("open ".$url); + } elseif ($p['postflight'] == 2 && $p['rsync_dest']) { echo msg("rsync..."); $command = "rsync -avv -e ssh ".$bpath." ".$p['rsync_dest']; $count = trim(shell_exec("find ".escapeshellarg($bpath)." | wc -l")); diff --git a/YubaPrefs.php b/YubaPrefs.php index 0bdf318..168c243 100644 --- a/YubaPrefs.php +++ b/YubaPrefs.php @@ -13,14 +13,6 @@ function makeWindowString($p, $strings) { *.title = Preferences *.floating = 1 - parallel.type = checkbox - parallel.label = Execute shell commands in parallel - parallel.default = ".$p['parallel']." - - debug.type = checkbox - debug.label = Enable verbose logging - debug.default = ".$p['debug']." - bdest.type = openbrowser bdest.filetype = directory bdest.label = Destination @@ -32,6 +24,7 @@ function makeWindowString($p, $strings) { postflight.option = ".$strings[0][0]." postflight.option = ".$strings[0][1]." postflight.option = ".$strings[0][2]." + postflight.option = ".$strings[0][3]." postflight.default = ".$strings[0][$p['postflight']]." postflight.width = 380 @@ -41,6 +34,21 @@ function makeWindowString($p, $strings) { rsync_dest.placeholder = user@server.com:files/ rsync_dest.width = 380 + hr0.type = image + hr0.path = ".__DIR__."/hr.png"." + hr0.width = 380 + hr0.height = 2 + + parallel.type = checkbox + parallel.label = Use parallel + parallel.default = ".$p['parallel']." + + debug.type = checkbox + debug.label = Verbose logging + debug.default = ".$p['debug']." + debug.x = 200 + debug.y = 439 + hr1.type = image hr1.path = ".__DIR__."/hr.png"." hr1.width = 380 @@ -79,15 +87,15 @@ function makeWindowString($p, $strings) { thumbs.default = ".$strings[2][$p['thumbs']]." thumbs.width = 120 - thumb_priority.type = popup - thumb_priority.label = Priority - thumb_priority.option = ".$strings[3][0]." - thumb_priority.option = ".$strings[3][1]." - thumb_priority.option = ".$strings[3][2]." - thumb_priority.default = ".$strings[3][$p['thumb_priority']]." - thumb_priority.width = 120 - thumb_priority.x = 150 - thumb_priority.y = 227 + thumb_mode.type = popup + 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 + thumb_mode.y = 227 thumb_size.type = textfield thumb_size.default = ".$p['thumb_size']." @@ -105,14 +113,15 @@ function makeWindowString($p, $strings) { icons.default = ".$strings[2][$p['icons']]." icons.width = 120 - icon_tool.type = popup - icon_tool.label = Tool - icon_tool.option = ".$strings[4][0]." - icon_tool.option = ".$strings[4][1]." - icon_tool.default = ".$strings[4][$p['icon_tool']]." - icon_tool.width = 120 - icon_tool.x = 150 - icon_tool.y = 162 + icon_mode.type = popup + icon_mode.label = Mode + icon_mode.option = ".$strings[4][0]." + icon_mode.option = ".$strings[4][1]." + icon_mode.option = ".$strings[4][2]." + icon_mode.default = ".$strings[4][$p['icon_mode']]." + icon_mode.width = 120 + icon_mode.x = 150 + icon_mode.y = 162 icon_size.type = textfield icon_size.default = ".$p['icon_size']." @@ -198,11 +207,11 @@ if(!$p['bdest']) { // Load strings -$strings[] = array("Do nothing","Reveal result in Finder","Upload result with rsync"); +$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("external","ql-thumbnail","qlmanage"); -$strings[] = array("qltool","qlmanage"); +$strings[] = array("All files","Most files","Some files"); +$strings[] = array("All files","Most files","Some files"); // Launch Pashua and parse results @@ -229,9 +238,9 @@ if (@$result['cb']) { $result['postflight'] = array_search($result['postflight'],$strings[0]); $result['stat_mode'] = array_search($result['stat_mode'],$strings[1]); $result['thumbs'] = array_search($result['thumbs'],$strings[2]); -$result['thumb_priority'] = array_search($result['thumb_priority'],$strings[3]); +$result['thumb_mode'] = array_search($result['thumb_mode'],$strings[3]); $result['icons'] = array_search($result['icons'],$strings[2]); -$result['icon_tool'] = array_search($result['icon_tool'],$strings[4]); +$result['icon_mode'] = array_search($result['icon_mode'],$strings[4]); // If the user didn't specify a destpath, set to default diff --git a/current_version.txt b/current_version.txt index 9b7b06b..01eb481 100755 --- a/current_version.txt +++ b/current_version.txt @@ -1 +1 @@ -0.7.13.2 \ No newline at end of file +0.8.0.0 \ No newline at end of file diff --git a/filetypes.php b/filetypes.php index edee792..8ccb82f 100755 --- a/filetypes.php +++ b/filetypes.php @@ -9,11 +9,13 @@ $bin_mediainfo = escapeshellarg(__DIR__."/bin/mediainfo"); $bin_exiftool = escapeshellarg(__DIR__."/bin/exiftool"); $bin_ffmpeg = escapeshellarg(__DIR__."/bin/ffmpeg"); $bin_qlthumb = escapeshellarg(__DIR__."/bin/ql-thumbnail"); +$bin_qlicon = escapeshellarg(__DIR__."/bin/ql-icon"); $bin_qltool = escapeshellarg(__DIR__."/bin/qltool"); $bin_sox = escapeshellarg(__DIR__."/bin/sox"); -$bin_pngcrush = escapeshellarg(__DIR__."/bin/pngcrush"); +$bin_pngquant = escapeshellarg(__DIR__."/bin/pngquant"); $bin_parallel = escapeshellarg(__DIR__."/bin/parallel"); $bin_convert = escapeshellarg(__DIR__."/bin/convert"); +$bin_flacicon = escapeshellarg(__DIR__."/bin/flacicon"); // System tools $bin_php = "php"; @@ -73,10 +75,6 @@ $p['c_files'] = array( "DS_Store", "doc", "docx" ); -// thumbnail bindings -$p['t_f']['pdf'][] = "jpg"; -$p['t_f']['pdf'][] = array("gs","qlmanage","sips","vips"); - // Use ffmpeg to generate thumbnails for these files $p['t_files']['ffmpeg'] = array( "mkv", "avi", @@ -136,9 +134,6 @@ $p['i_skip'] = array( "jpg", "zip", "DS_Store" ); -// Custom qlgenerator bindings -$p['i_bindings']['indd'] = array("com.adobe.indesign-document","Art View.qlgenerator"); - // Run mediainfo on these files $p['m_files'] = array( "mkv", "ogg", diff --git a/functions.php b/functions.php index 2ffaa1f..bfe0744 100755 --- a/functions.php +++ b/functions.php @@ -102,11 +102,11 @@ function askMulti($string, $buttons) { return array_search($result,$buttons); } -function msg($string) { +function msg($string, $extra=true) { global $messages_log_file; $logstring = "[".date('Y-m-d h:i:s')."] ".$string."\n"; file_put_contents($messages_log_file, $logstring, FILE_APPEND); - file_put_contents("/tmp/yuba/debug.log", $logstring, FILE_APPEND); + if ($extra) { file_put_contents("/tmp/yuba/debug.log", $logstring, FILE_APPEND); } return $string."\n"; } diff --git a/helper.php b/helper.php index 7a51955..79c4b27 100755 --- a/helper.php +++ b/helper.php @@ -13,9 +13,14 @@ require("filetypes.php"); $dm = ""; function dfm ($string, $flag = 0) { // dumb workaround for debug messages appearing out of order + // bypass for single-thread to observe hangs + //dm($string); + //return global $dm; - if ($flag) { + if ($flag == 1) { $dm .= str_repeat("-",33)."\n".$string."\n".str_repeat("-",33)."\n"; + } elseif ($flag == 2) { + $dm .= str_repeat("-",66)."\n".$string."\n".str_repeat("-",66)."\n"; } else { $dm .= "[".date('Y-m-d h:i:s')."] ".$string."\n"; } @@ -25,6 +30,7 @@ $fid = $argv[1]; $pathname = $argv[2]; $shellpath = escapeshellarg($pathname); $ext = pathinfo($pathname,PATHINFO_EXTENSION); +$file = pathinfo($pathname, PATHINFO_BASENAME); $bpath = $argv[3]; $mytime = $argv[4]; @@ -34,9 +40,6 @@ $messages_log_file = $bpath."/".$stamp."_messages.log"; $tmpdir = "/tmp/yuba/".$mytime; if (!is_dir($tmpdir)) { mkdir($tmpdir,0777,true); dfm("mkdir ",$tmpdir); } -$file = pathinfo($pathname, PATHINFO_BASENAME); -$ext = pathinfo($pathname, PATHINFO_EXTENSION); - $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); @@ -49,9 +52,9 @@ $dbp->query("PRAGMA journal_mode = WAL"); $sbatch = array(); -$estring = "\nBATCH: ".basename($pathname); +$estring = "\nBATCH: ".shortlabel(basename($pathname),20); -dfm("BATCH INIT ".$file.":".print_r($argv,true)); +dfm("BATCH INIT ".$file.":".print_r($argv,true),2); // Thumbs ////////////////////////////////////////// @@ -62,7 +65,7 @@ if ($p['thumbs']) { $estring .= " THUMBS"; - // "bad" filesizes + // "bad" filesizes from generic icons $discard = array( 3953, 4977, 5019, @@ -70,13 +73,13 @@ if ($p['thumbs']) { 6616, 17393 ); - $tfile = $tmpdir."/".substr($fid,0,2)."/".$fid.".jpg"; - $tpfile = $tmpdir."/".substr($fid,0,2)."/".$file.".png"; // workaround for qlmanage naming convention + $tfile = $tmpdir."/thumbs/".substr($fid,0,2)."/".$fid.".jpg"; + $tpfile = $tmpdir."/thumbs/".substr($fid,0,2)."/".$file.".png"; // workaround for qlmanage naming convention $dfile = $bpath."/thumbs/".substr($fid, 0, 2)."/".$fid.".jpg";; - if (!is_dir(dirname($tfile))) { @mkdir(dirname($tfile)); dfm("mkdir ".dirname($tfile)); } + if (!is_dir(dirname($tfile))) { @mkdir(dirname($tfile),0777,true); dfm("mkdir ".dirname($tfile)); } - if (in_array($ext, $p['t_skip'])) { + if ($p['thumb_mode'] != 0 && in_array($ext, $p['t_skip'])) { // file extension is in the skip list $estring .= " ->t_skip"; dfm("file extension is in the skip list"); @@ -89,10 +92,11 @@ if ($p['thumbs']) { $estring .= " ->skip_fast"; goto icons; } - - $rowid = @$dbp->query("SELECT rowid FROM thumbs WHERE fid='".$fid."'")->fetch()['rowid']; // check for existing thumb generation attempt + $sql = "SELECT rowid FROM thumbs WHERE fid='".$fid."'"; + dfm($sql); + $rowid = @$dbp->query($sql)->fetch()['rowid']; if (!$rowid) { // no prior attempt @@ -113,7 +117,7 @@ if ($p['thumbs']) { // prior attempt dfm("a prior attempt at thumb generation was found for ".$fid); - $estring .= " ->skip"; + $estring .= " ->pskip"; goto icons; } @@ -121,8 +125,7 @@ if ($p['thumbs']) { $cmd['sips'] = $bin_sips." -s format jpeg -s formatOptions 80 --resampleHeightWidthMax ".$p['thumb_size']." ".$shellpath." --out ".$tfile; // add ?? "-d profile --deleteColorManagementProperties" $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/10}') spectrogram -o - | ".$bin_convert." - -crop 800x515+58+30 -scale 515x515! +dither -colors 16 ".$tfile; - $cmd['sox'] = $bin_sox." ".$shellpath." -n trim 0 $(".$bin_exiftool." -s -s -s -duration# ".$shellpath." | awk '{print $1/10}') spectrogram -o ".$tpfile."; ".$bin_sips." -s format jpeg -s formatOptions 80 ".escapeshellarg($tpfile)." --out ".$tfile; + $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['ql-thumbnail'] = $bin_qlthumb." ".$shellpath." ".$tfile." public.jpeg ".$p['thumb_size']." ".$p['thumb_size']." .8"; @@ -138,43 +141,47 @@ if ($p['thumbs']) { $external_tool = null; } dfm("external tool for ".$ext." = ".$external_tool); - switch ($p['thumb_priority']) { - // external tool priority + switch ($p['thumb_mode']) { case 0: $priority = array($external_tool,"ql-thumbnail","qlmanage"); break; - // ql-thumbnail priority - case 1: $priority = array("ql-thumbnail","qlmanage",$external_tool); break; - // qlmanage priority - case 2: $priority = array("qlmanage","ql-thumbnail",$external_tool); break; + case 1: $priority = array("ql-thumbnail","qlmanage"); break; + case 2: $priority = array("ql-thumbnail"); break; } + dfm("thumb mode ".$p['thumb_mode']); dfm("priority for ".$ext." is: ".print_r($priority,true)); $stmt->BindValue(":fid",$fid); $stmt->BindValue(":created",time()); - if (!is_dir(dirname($dfile))) { @mkdir(dirname($dfile)); dfm("mkdir ".dirname($dfile)); } - foreach ($priority as $tool) { - if (empty($cmd[$tool])) { break; } + if (empty($cmd[$tool])) { continue; } - shell_exec($cmd[$tool]." 2>&1"); dfm($cmd[$tool]); + shell_exec($cmd[$tool]." 2>&1"); $estring .= " ->".$tool; - + $checksize = @filesize($tfile); - if ($checksize && !in_array($checksize,$discard)) { - $estring .= " ->use"; - $stmt->BindValue(":tool",$tool); - $stmt->BindValue(":relative_path",substr($dfile, strlen($bpath))); - list($width, $height) = getimagesize($tfile); - $stmt->BindValue(":width",$width); - $stmt->BindValue(":height",$height); - rename($tfile,$dfile); - dfm("moving ".$tfile." to ".$dfile); - break; + if ($checksize) { + if (!empty($discard) && in_array($checksize,$discard)) { + $estring .= " ->discard"; + dfm($checksize." is in the banned size array"); + } else { + $estring .= " ->use"; + dfm ("generated ".$tfile." filesize is ".$checksize); + $stmt->BindValue(":tool",$tool); + $stmt->BindValue(":relative_path",substr($dfile, strlen($bpath))); + dfm("getimagesize on ".$tfile); + list($width, $height) = getimagesize($tfile); + $stmt->BindValue(":width",$width); + $stmt->BindValue(":height",$height); + if (!is_dir(dirname($dfile))) { @mkdir(dirname($dfile)); dfm("mkdir ".dirname($dfile)); } + rename($tfile,$dfile); + dfm("moving ".$tfile." to ".$dfile); + break; + } } else { $estring .= " ->discard"; - dfm("filesize ".$checksize." is in the banned size array (or is zero)"); + dfm($tool." produced a bad file (size=".$checksize.")"); } } @@ -193,109 +200,129 @@ if ($p['icons']) { dfm("ICONS",1); $estring .= " ICONS"; - - if ($p['icon_tool'] == 0) { - $tool = "qltool"; - } elseif ($p['icon_tool'] == 1) { - $tool = "qlmanage"; - } - - if (in_array($ext, $p['i_skip'])) { - // file extension is in the skip list + + if ($p['icon_mode'] != 0 && in_array($ext, $p['i_skip'])) { $estring .= " ->i_skip"; + dfm("file extension is in the skip list"); goto meta; } - $tfile = $tmpdir."/".substr($fid,0,2)."/".$file.".png"; - if (!is_dir(dirname($tfile))) { @mkdir(dirname($tfile)); } - // workaround for qlmanage naming convention + $tfile = $tmpdir."/icons/".substr($fid,0,2)."/".$fid.".png"; + if (!is_dir(dirname($tfile))) { @mkdir(dirname($tfile),0777,true); dfm("mkdir ".dirname($tfile)); } - $rowid = @$dbp->query("SELECT rowid FROM icons WHERE fid='".$fid."'")->fetch()['rowid']; - // check for existing icon generation attempt + // we can't check for files (faster) here because they are stored by md5_file hash + $sql = "SELECT rowid FROM icons WHERE fid='".$fid."'"; + dfm($sql); + $rowid = @$dbp->query($sql)->fetch()['rowid']; if (!$rowid) { - // no prior attempt + dfm("no prior attempt was found"); $stmt = $dbp->prepare("INSERT INTO icons VALUES (:fid, :hash, :created, :relative_path, :tool)"); - $estring .= " ->generate"; } elseif ($rowid && $p['icons'] == 2) { - // prior attempt but rebuild mode + dfm("a prior attempt was found but we are in rebuild mode"); $stmt = $dbp->prepare("UPDATE icons SET fid = :fid, hash = :hash, created = :created, relative_path = :relative_path, tool = :tool WHERE rowid = ".$rowid); $estring .= " ->rebuild"; } else { - // prior attempt - $estring .= " ->skip"; + dfm("a prior attempt was found, skipping"); + $estring .= " ->pskip"; goto meta; } $stmt->BindValue(":fid",$fid); - - if ($tool == "qltool") { - - $cmd = $bin_qltool." di ".$shellpath." ".$p['icon_size']." ".$p['icon_size']." | base64 --decode > ".escapeshellarg($tfile); - - } elseif ($tool == "qlmanage") { - - // > code for custom qlgenerator bindings goes here < - - $cmd = $bin_qlmanage." -ti -s ".$p['icon_size']." -o ".dirname($tfile)." ".$shellpath; - //$cmd = $bin_qlmanage." -ti -f ".floor($p['icon_size']/128)." -o ".dirname($tfile)." ".$shellpath; - - } - shell_exec($cmd); - - if (@filesize($tfile)) { - - $hash = md5_file($tfile); - $stmt->BindValue(":hash",$hash); - - if ($row = @$dbp->query("SELECT * FROM icons WHERE hash='".$hash."'")->fetchAll()[0]) { - // check for another icon with the same hash - - $stmt->BindValue(":created",$row['created']); - $stmt->BindValue(":relative_path",$row['relative_path']); - $stmt->BindValue(":tool",$row['tool']); - - $estring .= " ->recycle"; - - } else { - - $dfile = $bpath."/icons/".substr($hash, 0, 2)."/".$hash.".png"; + $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; + + if ($p['icon_mode'] == 2) { + + dfm("icon mode 2, bypassing hash check"); + $tool = "ql-icon"; + shell_exec($cmd[$tool]." 2>&1"); + $stmt->BindValue(":tool",$tool); + dfm($cmd[$tool]); + $estring .= " ->".$tool; + + $checksize = @filesize($tfile); + if ($checksize) { + dfm("generated ".$tfile." filesize is ".$checksize); + $dfile = $bpath."/icons/".substr($fid, 0, 2)."/".$fid.".png"; if (!is_dir(dirname($dfile))) { @mkdir(dirname($dfile)); } - + rename($tfile,$dfile); + dfm("moving ".$tfile." to ".$dfile); + $stmt->BindValue(":created",time()); + $stmt->BindValue(":relative_path",substr($dfile,strlen($bpath))); + $stmt->BindValue(":hash",null); $estring .= " ->use"; + } else { + $estring .= " ->discard"; + dfm($tool." produced a bad file (size=".$checksize.")"); + } + + } else { + + if ($ext == "flac") { + $tools = array("flacicon","ql-icon","qltool"); + } else { + $tools = array("ql-icon","qltool"); + } + foreach ($tools as $tool) { + if (!@filesize($tfile)) { + shell_exec($cmd[$tool]." 2>&1"); + dfm($cmd[$tool]); + $estring .= " ->".$tool; + } + } + + $checksize = @filesize($tfile); + if ($checksize) { + + dfm ("generated ".$tfile." filesize is ".$checksize); + dfm("md5_file on ".$tfile); + $hash = md5_file($tfile); + $stmt->BindValue(":hash",$hash); + + $sql = "SELECT * FROM icons WHERE hash='".$hash."'"; + dfm($sql); + $row = @$dbp->query($sql)->fetchAll()[0]; - if ($tool == "qltool") { - // qltool makes 2x icons for some reason - - //shell_exec($bin_sips." -z ".$p['icon_size']." ".$p['icon_size']." ".$tfile." --out ".$dfile); - shell_exec($bin_convert." ".escapeshellarg($tfile)." -scale 50% -strip -define png:compression-level=9 ".$dfile); + if ($row) { + + dfm("found another record with the same hash"); + $estring .= " ->recycle"; + $stmt->BindValue(":created",$row['created']); + $stmt->BindValue(":relative_path",$row['relative_path']); + $stmt->BindValue(":tool",$row['tool']); } else { - //rename($tfile,$dfile); - shell_exec($bin_convert." ".escapeshellarg($tfile)." -strip -define png:compression-level=9 ".$dfile); - + dfm("no existing hash record"); + $dfile = $bpath."/icons/".substr($hash, 0, 2)."/".$hash.".png"; + if (!is_dir(dirname($dfile))) { @mkdir(dirname($dfile)); } + rename($tfile,$dfile); + dfm("moving ".$tfile." to ".$dfile); + $stmt->BindValue(":created",time()); + $stmt->BindValue(":relative_path",substr($dfile,strlen($bpath))); + $stmt->BindValue(":tool",$tool); + $estring .= " ->use"; + } - - $stmt->BindValue(":created",time()); - $stmt->BindValue(":relative_path",substr($dfile,strlen($bpath))); - $stmt->BindValue(":tool",$tool); - - } - - } else { - $estring .= " ->discard"; - - } + } else { + $estring .= " ->discard"; + dfm($tool." produced a bad file (size=".$checksize.")"); + + } + + } + $sbatch[] = $stmt; $estring .= " ->db"; @@ -313,15 +340,19 @@ if ($p['meta']) { if (!in_array($ext, $p['e_files']) && !in_array($ext, $p['m_files'])) { $estring .= " ->notmedia"; + dfm("file extension ".$ext." is not a media file"); goto hashy; } if (in_array($ext, $p['e_files'])) { - $check = @$dbp->query("SELECT EXISTS(SELECT 1 FROM exiftool WHERE fid='".$fid."')")->fetch(); - if (!reset($check)) { // hacky but needed because we set FETCH_ASSOC - $arrstring = shell_exec($bin_exiftool." -php ".$shellpath); - // $rawexif = eval("return ".`$bin_exiftool -php $shellpath`); - // do an addtl check below to prevent "PHP Parse error: syntax error, unexpected end of file, expecting ';'" + $sql = "SELECT EXISTS(SELECT 1 FROM exiftool WHERE fid='".$fid."')"; + dfm($sql); + $check = @$dbp->query($sql)->fetch(); + if (!reset($check)) { + dfm("creating exiftool dump"); + $cmd = $bin_exiftool." -php ".$shellpath; + dfm($cmd); + $arrstring = shell_exec($cmd); if (substr($arrstring,0,5) == "Array") { $rawexif = eval("return ".$arrstring); $stmt = $dbp->prepare("INSERT INTO exiftool VALUES (:fid, :tags)"); @@ -332,21 +363,24 @@ if ($p['meta']) { } } else { $estring .= " ->e_found"; + dfm("existing exiftool dump found"); } } if (in_array($ext, $p['m_files'])) { - $check = @$dbp->query("SELECT EXISTS(SELECT 1 FROM mediainfo WHERE fid='".$fid."')")->fetch(); + $sql = "SELECT EXISTS(SELECT 1 FROM mediainfo WHERE fid='".$fid."')"; + dfm($sql); + $check = @$dbp->query($sql)->fetch(); if (!reset($check)) { + dfm("creating mediainfo dump"); $stmt = $dbp->prepare("INSERT INTO mediainfo VALUES (:fid, :info)"); $stmt->BindValue(":fid",$fid); - //$stmt->BindValue(":info",serialize(parseMediaInfo(shell_exec($bin_mediainfo." --Output=OLDXML ".$shellpath." 2>&1")))); - //$stmt->BindValue(":info",shell_exec($bin_mediainfo." --Output=OLDXML ".$shellpath." 2>&1")); $stmt->BindValue(":info",shell_exec($bin_mediainfo." --Output=JSON ".$shellpath." 2>&1")); $sbatch[] = $stmt; $estring .= " ->minfo"; } else { $estring .= " ->m_found"; + dfm("existing mediainfo dump found"); } } @@ -362,14 +396,20 @@ if ($p['hash']) { $estring .= " HASH"; $size = filesize($pathname); + dfm("file ".$pathname." is ".$size); $limit = $p['hash_limit']*1000000000; - $check = @$dbp->query("SELECT EXISTS(SELECT 1 FROM md5 WHERE fid='".$fid."')")->fetch(); + $sql = "SELECT EXISTS(SELECT 1 FROM md5 WHERE fid='".$fid."')"; + dfm($sql); + $check = @$dbp->query($sql)->fetch(); if (reset($check)) { $estring .= " ->exists"; + dfm("hash already exists for ".$pathname); } elseif ($p['hash_limit'] && ($size > $limit)) { $estring .= " ->too big"; + dfm("file is too big to hash"); } else { $estring .= " ->generating"; + dfm("generating hash for ".$pathname); $stmt = $dbp->prepare("INSERT INTO md5 VALUES (:fid, :hash)"); $stmt->BindValue(":fid",$fid); $stmt->BindValue(":hash",md5_file($pathname)); @@ -392,17 +432,21 @@ if ($p['contents']) { $cpath = $bpath."/contents/".substr($fid, 0, 2); $cfile = $cpath."/".$fid.".zip"; if (in_array($ext, $p['c_files'])) { - if (!is_dir($cpath)) { mkdir($cpath); } $max_size = $p['contents_limit'] * 1000; if ($ext == ".DS_Store") { // store all DS_Store files no matter how big + dfm("flagging ds_store file for inclusion"); $my_size = 1; } else { $my_size = filesize($pathname); - } + dfm("file ".$pathname." is ".$my_size); + } if (!file_exists($cfile) && $my_size < $max_size) { - + + if (!is_dir($cpath)) { mkdir($cpath); dfm("mkdir ",$cpath); } + $estring .= " ->zip"; + dfm("creating a zip archive of ".$pathname); $zip = new ZipArchive(); $zip->open($cfile, ZipArchive::CREATE); @@ -421,9 +465,11 @@ if ($p['contents']) { // Inserts ////////////////////////////////////////// -foreach ($sbatch as $stmt) { $stmt->execute(); } +dfm("SQL",1); + +foreach ($sbatch as $stmt) { $stmt->execute(); dfm($stmt->queryString); } dm($dm); -echo msg($estring); +echo msg($estring,false); ?> \ No newline at end of file diff --git a/prefs.php b/prefs.php index fba2d97..aaa81c4 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:14:"thumb_priority";i:0;s:5:"icons";i:1;s:9:"icon_size";i:512;s:9:"icon_tool";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: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 diff --git a/web/rtc.php b/web/rtc.php index 07119c9..8fd9ea3 100644 --- a/web/rtc.php +++ b/web/rtc.php @@ -4,7 +4,7 @@ // Yuba RTC Browser ///////////////////////////////////////////////////////////////// -$browser_version = "0.7.13.0"; +$browser_version = "0.7.13.2"; require "togggle.php"; require "lib/ref/ref.php"; @@ -12,7 +12,7 @@ require "lib/ref/ref.php"; ref::config('expLvl', 1); ref::config('validHtml', TRUE); -$db_dir = "data/debug"; +$db_dir = "data/"; $icon_size = 96; $pad = 40; $border_tools = array("sips","sox","ffmpeg","ql-thumbnail"); @@ -61,7 +61,7 @@ div.iibox { display: table-cell; div.diibox { display: table-cell; vertical-align: middle; - background: url("/icons/directory.png"); + background: url("/yicons/directory.png"); background-repeat: no-repeat; background-size: px; background-position: center; @@ -105,8 +105,7 @@ img#thumb { padding: 6px; box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.1); } -img#item { float: left; margin-right: 10px; width: 32px; height: 32px; } -img { margin-bottom: 8px; } +img#item { float: left; margin-right: 10px; width: 32px; height: 32px; margin-bottom: 8px; } div.title { padding: 0px 10px 0px 10px; } @@ -348,8 +347,8 @@ function mb_shortlabel($filename, $max = 40) { function findicon($filename) { $ext = pathinfo($filename)['extension']; - $good = "icons/null.png"; - foreach (glob("icons/*.png") as $file) { + $good = "yicons/null.png"; + foreach (glob("yicons/*.png") as $file) { if (pathinfo($file)['filename'] == $ext) { $good = $file; } @@ -359,9 +358,9 @@ function findicon($filename) { ///////////////////////////////////////////////////////////////// -$db_file = $_GET['db']; -$pid = $_GET['pid']; -$search = $_POST['query']; +$db_file = @$_GET['db']; +$pid = @$_GET['pid']; +$search = @$_POST['query']; $parser = new plistParser(); if ($db_file) { @@ -380,6 +379,8 @@ if ($db_file) { $zpath = $dbo->query("SELECT zpath FROM _skim")->fetch()['zpath']; $skim_version = $dbo->query("SELECT version FROM _skim")->fetch()['version']; + $spotlight_status = $dbo->query("SELECT mdutil FROM _skim")->fetch()['mdutil']; + // Check for initial view $view = $dbo->query("SELECT * FROM _skim")->fetch(); @@ -394,7 +395,7 @@ if ($db_file) { $view['qlmanage'] = array($view['qlmanage']); } $view['profile'] = array($view['profile']); - if ($view['details']) { + if (@$view['details']) { $view['details'] = unserialize($view['details']); } if (substr($view['disks'],0,5) == "parseString(utf8_for_xml($view['vdisks'])); } - if ($view['hdiutil']) { + if (@$view['hdiutil']) { $view['hdiutil'] = $parser->parseString(utf8_for_xml($view['hdiutil'])); } $view['Type'] = "dir"; @@ -419,12 +420,14 @@ if ($db_file) { if (is_serial($view['stat'])) { $view['stat'] = unserialize($view['stat']); } - $dirmdls = $dbo->query("SELECT rowid, * FROM mdls WHERE (rowid='".$view['rowid']."')")->fetch(); + if (!strpos($spotlight_status,"disabled")) { + $dirmdls = $dbo->query("SELECT rowid, * FROM mdls WHERE (rowid='".$view['rowid']."')")->fetch(); + } } // Header - echo "Home "; + echo "Home "; $dbs = glob(pathinfo($_GET['db'],PATHINFO_DIRNAME)."/????-??-??_??-??-??.sqlite3"); rsort($dbs); echo "