Merge remote-tracking branch 'mike/master' into dev

This commit is contained in:
Mario Vavti 2017-11-20 14:27:20 +01:00
commit 0325efeb35
11 changed files with 169 additions and 64 deletions

View File

@ -0,0 +1,62 @@
<?php /** @file */
namespace Zotlabs\Daemon;
class Thumbnail {
static public function run($argc,$argv) {
if(! $argc == 2)
return;
$c = q("select * from attach where hash = '%s' ",
dbesc($argv[1])
);
if(! $c)
return;
$preview_style = intval(get_config('system','thumbnail_security',0));
$attach = $c[0];
$isize = 300;
if(strpos($attach['filetype'],'text/') !== false) {
$stream = @fopen($attach['content'],'rb');
if($stream) {
$content = trim(stream_get_contents($stream,4096));
$content = str_replace("\r",'',$content);
$content_a = explode("\n",$content);
}
if($content_a) {
$fsize = 4;
$lsize = 8;
$image = imagecreate($isize,$isize);
imagecolorallocate($image,255,255,255);
$colour = imagecolorallocate($image,0,0,0);
$border = imagecolorallocate($image,64,64,64);
$x1 = 0;
$y1 = 0;
$x2 = ImageSX($image) - 1;
$y2 = ImageSY($image) - 1;
for($i = 0; $i < 2; $i++) {
ImageRectangle($image, $x1++, $y1++, $x2--, $y2--, $border);
}
foreach($content_a as $l => $t) {
$l = $l + 1;
$x = 3;
$y = ($l * $lsize) + 3 - $fsize;
imagestring($image,1,$x,$y,$t,$colour);
if(($l * $lsize) >= $isize) {
break;
}
}
imagejpeg($image,$attach['content'] . '.thumb');
}
}
}
}

View File

@ -492,10 +492,11 @@ class Ping extends \Zotlabs\Web\Controller {
$t3 = dba_timer(); $t3 = dba_timer();
if($vnotify & (VNOTIFY_NETWORK|VNOTIFY_CHANNEL)) { if($vnotify & (VNOTIFY_NETWORK|VNOTIFY_CHANNEL)) {
$r = q("SELECT id, item_wall FROM item $r = q("SELECT id, item_wall FROM item
WHERE item_unseen = 1 and uid = %d WHERE item_unseen = 1 and uid = %d
$item_normal $item_normal
AND author_xchan != '%s'", AND author_xchan != '%s' $sql_extra ",
intval(local_channel()), intval(local_channel()),
dbesc($ob_hash) dbesc($ob_hash)
); );

View File

@ -208,6 +208,16 @@ class Browser extends DAV\Browser\Plugin {
$photo_icon = ''; $photo_icon = '';
$preview_style = intval(get_config('system','thumbnail_security',0)); $preview_style = intval(get_config('system','thumbnail_security',0));
$r = q("select content from attach where hash = '%s' and uid = %d limit 1",
dbesc($attachHash),
intval($owner)
);
if($r && file_exists(dbunescbin($r[0]['content']) . '.thumb')) {
$photo_icon = 'data:image/jpeg;base64,' . base64_encode(file_get_contents(dbunescbin($r[0]['content']) . '.thumb'));
// logger('found thumb: ' . $photo_icon);
}
if(strpos($type,'image/') === 0 && $attachHash) { if(strpos($type,'image/') === 0 && $attachHash) {
$r = q("select resource_id, imgscale from photo where resource_id = '%s' and imgscale in ( %d, %d ) order by imgscale asc limit 1", $r = q("select resource_id, imgscale from photo where resource_id = '%s' and imgscale in ( %d, %d ) order by imgscale asc limit 1",
dbesc($attachHash), dbesc($attachHash),
@ -220,12 +230,11 @@ class Browser extends DAV\Browser\Plugin {
if($type === 'image/svg+xml' && $preview_style > 0) { if($type === 'image/svg+xml' && $preview_style > 0) {
$photo_icon = $fullPath; $photo_icon = $fullPath;
} }
} }
$g = [ 'resource_id' => $attachHash, 'thumbnail' => $photo_icon, 'security' => $preview_style ]; $g = [ 'resource_id' => $attachHash, 'thumbnail' => $photo_icon, 'security' => $preview_style ];
call_hooks('file_thumbnail', $g); call_hooks('file_thumbnail', $g);
$photo_icon = $g['photo_icon']; $photo_icon = $g['thumbnail'];
$attachIcon = ""; // "<a href=\"attach/".$attachHash."\" title=\"".$displayName."\"><i class=\"fa fa-arrow-circle-o-down\"></i></a>"; $attachIcon = ""; // "<a href=\"attach/".$attachHash."\" title=\"".$displayName."\"><i class=\"fa fa-arrow-circle-o-down\"></i></a>";

View File

@ -363,6 +363,8 @@ class Directory extends DAV\Node implements DAV\ICollection, DAV\IQuota {
$p = photo_upload($c[0], \App::get_observer(), $args); $p = photo_upload($c[0], \App::get_observer(), $args);
} }
\Zotlabs\Daemon\Master::Summon([ 'Thumbnail' , $this->folder_hash ]);
$sync = attach_export_data($c[0], $hash); $sync = attach_export_data($c[0], $hash);
if ($sync) if ($sync)

View File

@ -244,6 +244,9 @@ class File extends DAV\Node implements DAV\IFile {
} }
} }
\Zotlabs\Daemon\Master::Summon([ 'Thumbnail' , $this->data['hash'] ]);
$sync = attach_export_data($c[0],$this->data['hash']); $sync = attach_export_data($c[0],$this->data['hash']);
if($sync) if($sync)

View File

@ -951,6 +951,9 @@ function attach_store($channel, $observer_hash, $options = '', $arr = null) {
call_hooks('photo_upload_end', $ret); call_hooks('photo_upload_end', $ret);
} }
\Zotlabs\Daemon\Master::Summon([ 'Thumbnail' , $hash ]);
if($dosync) { if($dosync) {
$sync = attach_export_data($channel,$hash); $sync = attach_export_data($channel,$hash);

View File

@ -241,69 +241,84 @@ abstract class photo_driver {
} }
public function orient($filename) {
/** /**
* This function is a bit unusual, because it is operating on a file, but you must * @brief reads exif data from filename
* first create an image from that file to initialise the type and check validity
* of the image.
*/ */
if(! $this->is_valid()) public function exif($filename) {
if((! function_exists('exif_read_data'))
|| (! in_array($this->getType(), [ 'image/jpeg' , 'image/tiff'] ))) {
return false; return false;
}
/*
* PHP 7.2 allows you to use a stream resource, which should reduce/avoid
* memory exhaustion on large images.
*/
if(version_compare(PHP_VERSION,'7.2.0') >= 0) {
$f = @fopen($filename,'rb');
}
else {
$f = $filename;
}
if($f) {
return @exif_read_data($f);
}
if((! function_exists('exif_read_data')) || ($this->getType() !== 'image/jpeg'))
return false; return false;
}
$exif = @exif_read_data($filename,null,true); /**
* @brief orients current image based on exif orientation information
*/
public function orient($exif) {
if(! ($this->is_valid() && $exif)) {
return false;
}
if($exif) {
$ort = $exif['IFD0']['Orientation']; $ort = $exif['IFD0']['Orientation'];
switch($ort) if(! $ort) {
{ return false;
}
switch($ort) {
case 1: // nothing case 1: // nothing
break; break;
case 2: // horizontal flip case 2: // horizontal flip
$this->flip(); $this->flip();
break; break;
case 3: // 180 rotate left case 3: // 180 rotate left
$this->rotate(180); $this->rotate(180);
break; break;
case 4: // vertical flip case 4: // vertical flip
$this->flip(false, true); $this->flip(false, true);
break; break;
case 5: // vertical flip + 90 rotate right case 5: // vertical flip + 90 rotate right
$this->flip(false, true); $this->flip(false, true);
$this->rotate(-90); $this->rotate(-90);
break; break;
case 6: // 90 rotate right case 6: // 90 rotate right
$this->rotate(-90); $this->rotate(-90);
break; break;
case 7: // horizontal flip + 90 rotate right case 7: // horizontal flip + 90 rotate right
$this->flip(); $this->flip();
$this->rotate(-90); $this->rotate(-90);
break; break;
case 8: // 90 rotate left case 8: // 90 rotate left
$this->rotate(90); $this->rotate(90);
break; break;
default:
break;
} }
return $exif; return true;
}
return false;
} }

View File

@ -203,7 +203,13 @@ function photo_upload($channel, $observer, $args) {
return $ret; return $ret;
} }
$exif = $ph->orient(($args['os_syspath']) ? $args['os_syspath'] : $src); // obtain exif data from the source file if present
$exif = $ph->exif(($args['os_syspath']) ? $args['os_syspath'] : $src);
if($exif) {
$ph->orient($exif);
}
@unlink($src); @unlink($src);

View File

@ -2704,8 +2704,8 @@ function linkify_tags($a, &$body, $uid, $diaspora = false) {
function getIconFromType($type) { function getIconFromType($type) {
$iconMap = array( $iconMap = array(
//Folder //Folder
t('Collection') => 'fa-folder', t('Collection') => 'fa-folder-o',
'multipart/mixed' => 'fa-folder', //dirs in attach use this mime type 'multipart/mixed' => 'fa-folder-o', //dirs in attach use this mime type
//Common file //Common file
'application/octet-stream' => 'fa-file-o', 'application/octet-stream' => 'fa-file-o',
//Text //Text

View File

@ -105,6 +105,10 @@ a,
color: $link_colour; color: $link_colour;
} }
.cloud-icon.tiles i {
color: #aaa;
}
a:hover, a:hover,
a:focus, a:focus,
.fakelink:hover, .fakelink:hover,

View File

@ -3,7 +3,7 @@
{{if $parentpath}} {{if $parentpath}}
<div class="cloud-container" > <div class="cloud-container" >
<div class="cloud-icon"><a href="{{$parentpath.path}}"> <div class="cloud-icon tiles"><a href="{{$parentpath.path}}">
<i class="fa fa-fw fa-level-up" ></i> <i class="fa fa-fw fa-level-up" ></i>
</a> </a>
</div> </div>
@ -14,7 +14,7 @@
{{foreach $entries as $item}} {{foreach $entries as $item}}
<div class="cloud-container"> <div class="cloud-container">
<div class="cloud-icon"><a href="{{$item.fullPath}}"> <div class="cloud-icon tiles"><a href="{{$item.fullPath}}">
{{if $item.photo_icon}} {{if $item.photo_icon}}
<img src="{{$item.photo_icon}}" title="{{$item.type}}" > <img src="{{$item.photo_icon}}" title="{{$item.type}}" >
{{else}} {{else}}