aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Zotlabs/Daemon/Thumbnail.php60
-rw-r--r--Zotlabs/Module/Hq.php22
-rw-r--r--Zotlabs/Storage/File.php8
-rw-r--r--Zotlabs/Thumbs/Mp3audio.php37
-rw-r--r--Zotlabs/Thumbs/Text.php49
-rw-r--r--view/js/mod_hq.js4
-rw-r--r--view/theme/redbasic/css/style.css15
-rw-r--r--view/tpl/cloud_directory.tpl4
-rw-r--r--view/tpl/notifications_widget.tpl42
9 files changed, 172 insertions, 69 deletions
diff --git a/Zotlabs/Daemon/Thumbnail.php b/Zotlabs/Daemon/Thumbnail.php
index aeea07410..caf5dd3ae 100644
--- a/Zotlabs/Daemon/Thumbnail.php
+++ b/Zotlabs/Daemon/Thumbnail.php
@@ -17,46 +17,36 @@ class Thumbnail {
if(! $c)
return;
- $preview_style = intval(get_config('system','thumbnail_security',0));
+ $preview_style = intval(get_config('system','thumbnail_security',0));
+ $preview_width = intval(get_config('system','thumbnail_width',300));
+ $preview_height = intval(get_config('system','thumbnail_height',300));
$attach = $c[0];
- $isize = 300;
+ $default_controller = null;
- 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;
+ $files = glob('Zotlabs/Thumbs/*.php');
+ if($files) {
+ foreach($files as $f) {
+ $clsname = '\\Zotlabs\\Thumbs\\' . ucfirst(basename($f,'.php'));
+ if(class_exists($clsname)) {
+ $x = new $clsname();
+ if(method_exists($x,'Match')) {
+ $matched = $x->Match($attach['filetype']);
+ if($matched) {
+ $x->Thumb($attach,$preview_style,$preview_width,$preview_height);
+ }
+ }
+ if(method_exists($x,'MatchDefault')) {
+ $default_matched = $x->MatchDefault(substr($attach['filetype'],0,strpos($attach['filetype'],'/')));
+ if($default_matched) {
+ $default_controller = $x;
+ }
}
}
- imagejpeg($image,$attach['content'] . '.thumb');
}
}
+ if(($default_controller) && (! file_exists(dbunescbin($attach['content']) . '.thumb'))) {
+ $default_controller->Thumb($attach,$preview_style,$preview_width,$preview_height);
+ }
}
-} \ No newline at end of file
+}
diff --git a/Zotlabs/Module/Hq.php b/Zotlabs/Module/Hq.php
index 92dfc8587..78087c0f9 100644
--- a/Zotlabs/Module/Hq.php
+++ b/Zotlabs/Module/Hq.php
@@ -45,21 +45,26 @@ class Hq extends \Zotlabs\Web\Controller {
if(! $item_hash) {
$r = q("SELECT mid FROM item
- WHERE uid = %d
- AND mid = parent_mid
- $item_normal
+ WHERE uid = %d
+ AND item_thread_top = 1
ORDER BY created DESC
limit 1",
- local_channel()
+ intval(local_channel())
);
- $item_hash = 'b64.' . base64url_encode($r[0]['mid']);
- if(!$item_hash) {
+ if(!$r[0]['mid']) {
\App::$error = 404;
notice( t('Item not found.') . EOL);
return;
}
+
+ $item_hash = 'b64.' . base64url_encode($r[0]['mid']);
}
+
+ if(strpos($item_hash,'b64.') === 0)
+ $decoded = @base64url_decode(substr($item_hash,4));
+ if($decoded)
+ $item_hash = $decoded;
$updateable = false;
@@ -101,11 +106,6 @@ class Hq extends \Zotlabs\Web\Controller {
$target_item = null;
- if(strpos($item_hash,'b64.') === 0)
- $decoded = @base64url_decode(substr($item_hash,4));
- if($decoded)
- $item_hash = $decoded;
-
$r = q("select id, uid, mid, parent_mid, thr_parent, verb, item_type, item_deleted, item_blocked from item where mid like '%s' limit 1",
dbesc($item_hash . '%')
);
diff --git a/Zotlabs/Storage/File.php b/Zotlabs/Storage/File.php
index 37376c177..53d5d3476 100644
--- a/Zotlabs/Storage/File.php
+++ b/Zotlabs/Storage/File.php
@@ -129,12 +129,16 @@ class File extends DAV\Node implements DAV\IFile {
$album = '';
$os_path = '';
- $r = q("SELECT flags, folder, os_storage, os_path, filename, is_photo FROM attach WHERE hash = '%s' AND uid = %d LIMIT 1",
+ $r = q("SELECT flags, folder, os_storage, os_path, display_path, filename, is_photo FROM attach WHERE hash = '%s' AND uid = %d LIMIT 1",
dbesc($this->data['hash']),
intval($c[0]['channel_id'])
);
if ($r) {
+
$os_path = $r[0]['os_path'];
+ $display_path = $r[0]['display_path'];
+ $filename = $r[0]['filename'];
+
if (intval($r[0]['os_storage'])) {
$d = q("select folder, content from attach where hash = '%s' and uid = %d limit 1",
@@ -210,7 +214,7 @@ class File extends DAV\Node implements DAV\IFile {
if($is_photo) {
require_once('include/photos.php');
- $args = array( 'resource_id' => $this->data['hash'], 'album' => $album, 'os_syspath' => $f, 'os_path' => $os_path, 'filename' => $r[0]['filename'], 'getimagesize' => $gis, 'directory' => $direct );
+ $args = array( 'resource_id' => $this->data['hash'], 'album' => $album, 'os_syspath' => $f, 'os_path' => $os_path, 'display_path' => $display_path, 'filename' => $filename, 'getimagesize' => $gis, 'directory' => $direct );
$p = photo_upload($c[0],\App::get_observer(),$args);
}
diff --git a/Zotlabs/Thumbs/Mp3audio.php b/Zotlabs/Thumbs/Mp3audio.php
new file mode 100644
index 000000000..000d65b22
--- /dev/null
+++ b/Zotlabs/Thumbs/Mp3audio.php
@@ -0,0 +1,37 @@
+<?php
+
+namespace Zotlabs\Thumbs;
+
+use \ID3Parser\ID3Parser;
+
+class Mp3audio {
+
+ function Match($type) {
+ return(($type === 'audio/mpeg') ? true : false );
+ }
+
+ function Thumb($attach,$preview_style,$height = 300, $width = 300) {
+ $p = new ID3Parser();
+
+ $id = $p->analyze(dbunescbin($attach['content']));
+
+ $photo = isset($id['id3v2']['APIC'][0]['data']) ? $id['id3v2']['APIC'][0]['data'] : null;
+ if(is_null($photo) && isset($id['id3v2']['PIC'][0]['data'])) {
+ $photo = $id['id3v2']['PIC'][0]['data'];
+ }
+
+ if($photo) {
+ $image = imagecreatefromstring($photo);
+ $dest = imagecreatetruecolor( $width, $height );
+ $srcwidth = imagesx($image);
+ $srcheight = imagesy($image);
+
+ imagealphablending($dest, false);
+ imagesavealpha($dest, true);
+ imagecopyresampled($dest, $image, 0, 0, 0, 0, $width, $height, $srcwidth, $srcheight);
+ imagedestroy($image);
+ imagejpeg($dest,dbunescbin($attach['content']) . '.thumb');
+ }
+ }
+}
+
diff --git a/Zotlabs/Thumbs/Text.php b/Zotlabs/Thumbs/Text.php
new file mode 100644
index 000000000..3ee7819bd
--- /dev/null
+++ b/Zotlabs/Thumbs/Text.php
@@ -0,0 +1,49 @@
+<?php
+
+namespace Zotlabs\Thumbs;
+
+
+class Text {
+
+ function MatchDefault($type) {
+ return(($type === 'text') ? true : false );
+ }
+
+ function Thumb($attach,$preview_style,$height = 300, $width = 300) {
+
+ $stream = @fopen(dbunescbin($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($width,$height);
+ imagecolorallocate($image,255,255,255);
+ $colour = imagecolorallocate($image,0,0,0);
+ $border = imagecolorallocate($image,208,208,208);
+
+ $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) >= $height) {
+ break;
+ }
+ }
+ imagejpeg($image,dbunescbin($attach['content']) . '.thumb');
+ }
+ }
+} \ No newline at end of file
diff --git a/view/js/mod_hq.js b/view/js/mod_hq.js
index cf7ec941c..8bbd5e3ad 100644
--- a/view/js/mod_hq.js
+++ b/view/js/mod_hq.js
@@ -1,4 +1,4 @@
-function hqLiveUpdate(notify_id, b64mid) {
+function hqLiveUpdate(notify_id) {
if(typeof profile_uid === 'undefined') profile_uid = false; /* Should probably be unified with channelId defined in head.tpl */
if((src === null) || (stopped) || (! profile_uid)) { $('.like-rotator').hide(); return; }
@@ -65,7 +65,7 @@ function hqLiveUpdate(notify_id, b64mid) {
// else data was valid - reset the recursion counter
liveRecurse = 0;
- if(notify_id !== 'undefined') {
+ if(notify_id !== 'undefined') {
$.post(
"hq",
{
diff --git a/view/theme/redbasic/css/style.css b/view/theme/redbasic/css/style.css
index b3cd9c9f8..82687db17 100644
--- a/view/theme/redbasic/css/style.css
+++ b/view/theme/redbasic/css/style.css
@@ -105,9 +105,6 @@ a,
color: $link_colour;
}
-.cloud-icon.tiles i {
- color: #aaa;
-}
a:hover,
a:focus,
@@ -1735,13 +1732,23 @@ dl.bb-dl > dd > li {
margin: 5px;
}
+.cloud-icon-container {
+ width: 48px;
+ height: 48px;
+ border: 1px solid #eee;
+ border-radius: $radius;
+}
+
.cloud-icon i {
- font-size: 48px;
+ font-size: 32px;
+ color: #aaa;
+ margin-top: 8px;
}
.cloud-icon img {
width: 48px;
height: 48px;
+ border-radius: $radius;
}
.cloud-title {
diff --git a/view/tpl/cloud_directory.tpl b/view/tpl/cloud_directory.tpl
index a9840a0b8..88b6bf563 100644
--- a/view/tpl/cloud_directory.tpl
+++ b/view/tpl/cloud_directory.tpl
@@ -4,7 +4,7 @@
{{if $parentpath}}
<div class="cloud-container" >
<div class="cloud-icon tiles"><a href="{{$parentpath.path}}">
- <i class="fa fa-fw fa-level-up" ></i>
+ <div class="cloud-icon-container"><i class="fa fa-fw fa-level-up" ></i></div>
</a>
</div>
<div class="cloud-title"><a href="{{$parentpath.path}}">..</a>
@@ -18,7 +18,7 @@
{{if $item.photo_icon}}
<img src="{{$item.photo_icon}}" title="{{$item.type}}" >
{{else}}
- <i class="fa fa-fw {{$item.iconFromType}}" title="{{$item.type}}"></i>
+ <div class="cloud-icon-container"><i class="fa fa-fw {{$item.iconFromType}}" title="{{$item.type}}"></i></div>
{{/if}}
</a>
</div>
diff --git a/view/tpl/notifications_widget.tpl b/view/tpl/notifications_widget.tpl
index 8168866ad..8ab9a79a0 100644
--- a/view/tpl/notifications_widget.tpl
+++ b/view/tpl/notifications_widget.tpl
@@ -1,5 +1,6 @@
<script>
var notifications_parent;
+
$(document).ready(function() {
notifications_parent = $('#notifications_wrapper')[0].parentElement.id;
$('.notifications-btn').click(function() {
@@ -13,6 +14,11 @@
$('#navbar-collapse-2').removeClass('show');
}
});
+
+ window.onpopstate = function(e) {
+ if(e.state !== null)
+ getData(e.state.b64mid, '');
+ };
});
{{if $module == 'display' || $module == 'hq'}}
@@ -20,8 +26,14 @@
var b64mid = $(this).data('b64mid');
var notify_id = $(this).data('notify_id');
var path = $(this)[0].pathname.substr(1,7);
+ var stateObj = { b64mid: b64mid };
- console.log(path);
+ {{if $module == 'display'}}
+ history.pushState(stateObj, '', 'display/' + b64mid);
+ {{/if}}
+ {{if $module == 'hq'}}
+ history.pushState(stateObj, '', 'hq/' + b64mid);
+ {{/if}}
{{if $module == 'hq'}}
if(b64mid !== 'undefined' && path !== 'pubstre') {
@@ -31,25 +43,29 @@
e.preventDefault();
e.stopPropagation();
- $('.thread-wrapper').remove();
-
- if(! page_load)
+ if(! page_load) {
$(this).fadeOut();
-
- bParam_mid = b64mid;
- mode = 'replace';
- page_load = true;
- {{if $module == 'hq'}}
- hqLiveUpdate(notify_id);
- {{else}}
- liveUpdate();
- {{/if}}
+ getData(b64mid, notify_id);
+ }
if($('#notifications_wrapper').hasClass('fs'))
$('#notifications_wrapper').prependTo('#' + notifications_parent).removeClass('fs');
}
});
{{/if}}
+
+ function getData(b64mid, notify_id) {
+ $('.thread-wrapper').remove();
+ bParam_mid = b64mid;
+ mode = 'replace';
+ page_load = true;
+ {{if $module == 'hq'}}
+ hqLiveUpdate(notify_id);
+ {{/if}}
+ {{if $module == 'display'}}
+ liveUpdate();
+ {{/if}}
+ }
</script>