function linkAttr() {
return array('class' => 'attachment',
- 'href' => $this->attachment->getUrl(),
+ 'href' => $this->attachment->getUrl(false),
'id' => 'attachment-' . $this->attachment->id,
'title' => $this->linkTitle());
}
}
function showRepresentation() {
+ $enclosure = $this->attachment->getEnclosure();
+
if (Event::handle('StartShowAttachmentRepresentation', array($this->out, $this->attachment))) {
- if (!empty($this->attachment->mimetype)) {
- $mediatype = common_get_mime_media($this->attachment->mimetype);
+ if (!empty($enclosure->mimetype)) {
+ // First, prepare a thumbnail if it exists.
+ $thumb = null;
+ try {
+ // Tell getThumbnail that we can show an animated image if it has one (4th arg, "force_still")
+ $thumb = $this->attachment->getThumbnail(null, null, false, false);
+ } catch (UseFileAsThumbnailException $e) {
+ $thumb = null;
+ } catch (UnsupportedMediaException $e) {
+ // FIXME: Show a good representation of unsupported/unshowable images
+ $thumb = null;
+ }
+
+ // Then get the kind of mediatype we're dealing with
+ $mediatype = common_get_mime_media($enclosure->mimetype);
+
+ // FIXME: Get proper mime recognition of Ogg files! If system has 'mediainfo', this should do it:
+ // $ mediainfo --inform='General;%InternetMediaType%'
+ if ($this->attachment->mimetype === 'application/ogg') {
+ $mediatype = 'video'; // because this element can handle Ogg/Vorbis etc. on its own
+ }
switch ($mediatype) {
// Anything we understand as an image, if we need special treatment, do it in StartShowAttachmentRepresentation
case 'image':
- try {
- // Tell getThumbnail that we can show an animated image if it has one (4th arg, "force_still")
- $thumb = $this->attachment->getThumbnail(null, null, false, false);
- $this->out->element('img', array('class'=>'u-photo', 'src' => $thumb->getUrl(), 'alt' => ''));
- } catch (UseFileAsThumbnailException $e) {
- $this->out->element('img', array('class'=>'u-photo', 'src' => $e->file->getUrl(), 'alt' => $e->file->title));
- } catch (UnsupportedMediaException $e) {
- // FIXME: Show a good representation of unsupported/unshowable images
+ if ($thumb instanceof File_thumbnail) {
+ $this->out->element('img', $thumb->getHtmlAttrs(['class'=>'u-photo', 'alt' => '']));
+ } else {
+ $this->out->element('img', array('class'=>'u-photo', 'src' => $this->attachment->getUrl(), 'alt' => $this->attachment->getTitle()));
}
+ unset($thumb); // there's no need carrying this along after this
break;
// HTML5 media elements
case 'audio':
case 'video':
- try {
- $thumb = $this->attachment->getThumbnail();
+ if ($thumb instanceof File_thumbnail) {
$poster = $thumb->getUrl();
- unset ($thumb);
- } catch (Exception $e) {
+ unset($thumb); // there's no need carrying this along after this
+ } else {
$poster = null;
}
+
$this->out->elementStart($mediatype,
array('class'=>"attachment_player u-{$mediatype}",
'poster'=>$poster,
break;
default:
+ unset($thumb); // there's no need carrying this along
switch ($this->attachment->mimetype) {
- // Ogg media that we're not really sure what it is...
- case 'application/ogg':
- $arr = array('type' => $this->attachment->mimetype,
- 'data' => $this->attachment->getUrl(),
- 'width' => 320,
- 'height' => 240
- );
- $this->out->elementStart('object', $arr);
- $this->out->element('param', array('name' => 'src', 'value' => $this->attachment->getUrl()));
- $this->out->element('param', array('name' => 'autoStart', 'value' => 1));
- $this->out->elementEnd('object');
- break;
case 'text/html':
if (!empty($this->attachment->filename)
&& (GNUsocial::isAjax() || common_config('attachments', 'show_html'))) {
$scripts[] = $script;
}
foreach ($scripts as $script) {
- common_log(LOG_DEBUG, $script->textContent);
+ common_debug($script->textContent);
$script->parentNode->removeChild($script);
}