From f297d9d846be484c09b29557232821f5f3569175 Mon Sep 17 00:00:00 2001 From: profiteroles Date: Tue, 15 Oct 2019 20:09:49 -0700 Subject: [PATCH] 0.8.0.0 --- CHANGELOG.md | 1 + MainMenu.nib/designable.nib | 2 +- Tester.zip | Bin 68649084 -> 68649084 bytes Yuba.app.zip | Bin 43871421 -> 43871556 bytes Yuba.php | 2 +- filetypes.php | 32 +++++++++++++++++--------------- helper.php | 32 ++++++++++++++++---------------- 7 files changed, 36 insertions(+), 33 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 030d66e..2fe461c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ All notable changes to this project will be documented in this file. Older chang - Move more operations into helper - "Open in browser" postflight - Clean up prefs +- Better logic for external tools (sips can be disabled manually) ## [0.7.13.2] - Added PHP extension checks diff --git a/MainMenu.nib/designable.nib b/MainMenu.nib/designable.nib index af81718..1a4ec07 100644 --- a/MainMenu.nib/designable.nib +++ b/MainMenu.nib/designable.nib @@ -548,7 +548,7 @@ Gw - + diff --git a/Tester.zip b/Tester.zip index 2bb7f3ec123d1321383e12535526362d0c838b88..12bb526711e4e24962866e09518697aaba8e81a3 100644 GIT binary patch delta 14055 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 delta 14055 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%0DpoKa1~rr z_G_)KtNo+p_~i5E>uM(VoxQE_hI(k0#GSvOztfg}$Lw44rhd;kpcA{37x&x8IZoOR}=dQckL7xkgx`&Chi6(xB(I!2ck zF0Sy*$UPS=jZ5INWk>G0V&$5XzU{9o&bPn!26u9Q)=C!l`ony?N?$bHZ7-T`xfi@A z6DpSIuRf(sXS8s+gQP?!KF4rI_?K9tYL#WD_b2;OgA!}B&Mq3@ayP7KqL0bLr@ZbE zIoYhlGM_ut47YFUX#Xf$daO^0HEiOYma<4XcgE$e>?cp`FR{iEpK#gbu4~CS-Fgoh z{)fx$ANcqH{jxRWsh@_H4)Cc1C3@j>=~P{yv!7HccE%!f=(U&YXpblk&583Rmc~_Z z&9YCNzi#d6p)+i0eZy)LMkp!42`dV4b@eF{8*7j>TE40m=xX7rudn6$ zfvy!E*QYCFowhm+JyW&f(X)0Gk4`DqqyhZM{x?f{yOk9{HtrWnXRIV9-6GGNn&t*HgOS|1v?{^;c0y0$o8j z&>i#uKH2lp2DXpS^HhzMty=Q5Wm*1Xd-%yc70d>6z+5m7%m-;;0ayqYfyE#lECEYF z2FL`8@vN{fOo-8unW8g{sDG_B4C3(U@v$dd;mTK`@nwi5jX%2 zf{(!=a2R|7j(|@=G58F84!!_if}`Loa14A6z5(BYe}d!S1o#eo4^Dy~z>nZ3a0>hk zegXdizk=VuX>bPo4$gve;5@hhE`m$oGPnZ%0DpoKa1~qw*TD^N6Z{2kf&bW^|JWYA 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 C%P`Xb diff --git a/Yuba.app.zip b/Yuba.app.zip index 50cf25637f15b09a2a8e074c234ef482e1f9f0c8..c0dea5f02955f8b4b87526d44fd45da96a190681 100644 GIT binary patch delta 20293 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"SELECT * FROM thumbs WHERE fid='".$dpreview[$pathname]."'")->fetch(); if (@$fetch_thumb['relative_path']) { $stmt->BindValue(":thumb_filename",$fetch_thumb['relative_path']); diff --git a/filetypes.php b/filetypes.php index 8ccb82f..dc1465a 100755 --- a/filetypes.php +++ b/filetypes.php @@ -94,20 +94,22 @@ $p['t_files']['ffmpeg'] = array( "mkv", "webm" ); // Use sips to generate thumbnails for these files -$p['t_files']['sips'] = array( "jpg", - "jpeg", - "tif", - "tiff", - "gif", - "psd", - "png", - "heic", - "pdf", - "ai", - "ps", - "bmp", - "pict", - "jp2" ); +// 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" ); // Use sox to generate thumbnails for these files $p['t_files']['sox'] = array( "flac", @@ -238,7 +240,7 @@ 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_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['p_files'] as $file) { $p['p_files'][] = strtoupper($file); } diff --git a/helper.php b/helper.php index 79c4b27..a4376cd 100755 --- a/helper.php +++ b/helper.php @@ -10,12 +10,15 @@ $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 - // bypass for single-thread to observe hangs - //dm($string); - //return + // uncomment next line to revert to instant message printing + dm($string); return; + global $dm; if ($flag == 1) { $dm .= str_repeat("-",33)."\n".$string."\n".str_repeat("-",33)."\n"; @@ -52,7 +55,7 @@ $dbp->query("PRAGMA journal_mode = WAL"); $sbatch = array(); -$estring = "\nBATCH: ".shortlabel(basename($pathname),20); +$estring = "\n[BATCH] ".shortlabel(basename($pathname),20); dfm("BATCH INIT ".$file.":".print_r($argv,true),2); @@ -131,14 +134,11 @@ if ($p['thumbs']) { $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; - if (in_array($ext, $p['t_files']['sips'])) { - $external_tool = "sips"; - } elseif (in_array($ext, $p['t_files']['ffmpeg'])) { - $external_tool = "ffmpeg"; - } elseif (in_array($ext, $p['t_files']['sox'])) { - $external_tool = "sox"; - } else { - $external_tool = null; + $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']) { @@ -157,7 +157,7 @@ if ($p['thumbs']) { if (empty($cmd[$tool])) { continue; } dfm($cmd[$tool]); - shell_exec($cmd[$tool]." 2>&1"); + shell_exec($cmd[$tool]." 2>1"); $estring .= " ->".$tool; $checksize = @filesize($tfile); @@ -244,7 +244,7 @@ if ($p['icons']) { dfm("icon mode 2, bypassing hash check"); $tool = "ql-icon"; - shell_exec($cmd[$tool]." 2>&1"); + shell_exec($cmd[$tool]." ".$redirect); $stmt->BindValue(":tool",$tool); dfm($cmd[$tool]); $estring .= " ->".$tool; @@ -274,7 +274,7 @@ if ($p['icons']) { } foreach ($tools as $tool) { if (!@filesize($tfile)) { - shell_exec($cmd[$tool]." 2>&1"); + shell_exec($cmd[$tool]." ".$redirect); dfm($cmd[$tool]); $estring .= " ->".$tool; } @@ -375,7 +375,7 @@ if ($p['meta']) { 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." 2>&1")); + $stmt->BindValue(":info",shell_exec($bin_mediainfo." --Output=JSON ".$shellpath." ".$redirect)); $sbatch[] = $stmt; $estring .= " ->minfo"; } else {