Audio attachments are now displayed as audio elements
authorMichael <heluecht@pirati.ca>
Mon, 5 Apr 2021 09:15:36 +0000 (09:15 +0000)
committerMichael <heluecht@pirati.ca>
Mon, 5 Apr 2021 09:15:36 +0000 (09:15 +0000)
src/Model/Item.php
view/templates/audio.tpl [new file with mode: 0644]

index c814ac9..765812b 100644 (file)
@@ -2643,8 +2643,40 @@ class Item
                        return $s;
                }
 
-               $as = '';
-               $vhead = false;
+               $s = self::addMediaAttachments($item, $s);
+
+               // Map.
+               if (strpos($s, '<div class="map">') !== false && !empty($item['coord'])) {
+                       $x = Map::byCoordinates(trim($item['coord']));
+                       if ($x) {
+                               $s = preg_replace('/\<div class\=\"map\"\>/', '$0' . $x, $s);
+                       }
+               }
+
+               // Replace friendica image url size with theme preference.
+               if (!empty($a->theme_info['item_image_size'])) {
+                       $ps = $a->theme_info['item_image_size'];
+                       $s = preg_replace('|(<img[^>]+src="[^"]+/photo/[0-9a-f]+)-[0-9]|', "$1-" . $ps, $s);
+               }
+
+               $s = HTML::applyContentFilter($s, $filter_reasons);
+
+               $hook_data = ['item' => $item, 'html' => $s];
+               Hook::callAll('prepare_body_final', $hook_data);
+
+               return $hook_data['html'];
+       }
+
+       /**
+        * Add media attachments to the content
+        *
+        * @param array $item
+        * @param string $content
+        * @return modified content
+        */
+       private static function addMediaAttachments(array $item, string $content)
+       {
+               $attached = '';
                foreach (Post\Media::getByURIId($item['uri-id'], [Post\Media::DOCUMENT, Post\Media::TORRENT, Post\Media::UNKNOWN]) as $attachment) {
                        $mime = $attachment['mimetype'];
 
@@ -2652,22 +2684,6 @@ class Item
                                'network' => $item['author-network'], 'url' => $item['author-link']];
                        $the_url = Contact::magicLinkByContact($author, $attachment['url']);
 
-                       if (strpos($mime, 'video') !== false) {
-                               if (!$vhead) {
-                                       $vhead = true;
-                                       DI::page()['htmlhead'] .= Renderer::replaceMacros(Renderer::getMarkupTemplate('videos_head.tpl'));
-                               }
-
-                               $as .= Renderer::replaceMacros(Renderer::getMarkupTemplate('video_top.tpl'), [
-                                       '$video' => [
-                                               'id'     => $item['author-id'],
-                                               'title'  => DI::l10n()->t('View Video'),
-                                               'src'    => $the_url,
-                                               'mime'   => $mime,
-                                       ],
-                               ]);
-                       }
-
                        $filetype = strtolower(substr($mime, 0, strpos($mime, '/')));
                        if ($filetype) {
                                $filesubtype = strtolower(substr($mime, strpos($mime, '/') + 1));
@@ -2677,37 +2693,40 @@ class Item
                                $filesubtype = 'unkn';
                        }
 
-                       $title = Strings::escapeHtml(trim(($attachment['description'] ?? '') ?: $attachment['url']));
-                       $title .= ' ' . ($attachment['size'] ?? 0) . ' ' . DI::l10n()->t('bytes');
-
-                       $icon = '<div class="attachtype icon s22 type-' . $filetype . ' subtype-' . $filesubtype . '"></div>';
-                       $as .= '<a href="' . strip_tags($the_url) . '" title="' . $title . '" class="attachlink" target="_blank" rel="noopener noreferrer" >' . $icon . '</a>';
-               }
+                       if (($filetype == 'video')) {
+                               $attached .= Renderer::replaceMacros(Renderer::getMarkupTemplate('video_top.tpl'), [
+                                       '$video' => [
+                                               'id'     => $item['author-id'],
+                                               'src'    => $the_url,
+                                               'mime'   => $mime,
+                                       ],
+                               ]);
+                       } elseif ($filetype == 'audio') {
+                               $attached .= Renderer::replaceMacros(Renderer::getMarkupTemplate('audio.tpl'), [
+                                       '$audio' => [
+                                               'id'     => $item['author-id'],
+                                               'src'    => $the_url,
+                                               'mime'   => $mime,
+                                       ],
+                               ]);
+                       } else {
+                               $title = Strings::escapeHtml(trim(($attachment['description'] ?? '') ?: $attachment['url']));
 
-               if ($as != '') {
-                       $s .= '<div class="body-attach">'.$as.'<div class="clear"></div></div>';
-               }
+                               if (!empty($attachment['size'])) {
+                                       $title .= ' ' . $attachment['size'] . ' ' . DI::l10n()->t('bytes');
+                               }
 
-               // Map.
-               if (strpos($s, '<div class="map">') !== false && !empty($item['coord'])) {
-                       $x = Map::byCoordinates(trim($item['coord']));
-                       if ($x) {
-                               $s = preg_replace('/\<div class\=\"map\"\>/', '$0' . $x, $s);
+                               /// @todo Use a template
+                               $icon = '<div class="attachtype icon s22 type-' . $filetype . ' subtype-' . $filesubtype . '"></div>';
+                               $attached .= '<a href="' . strip_tags($the_url) . '" title="' . $title . '" class="attachlink" target="_blank" rel="noopener noreferrer" >' . $icon . '</a>';
                        }
                }
 
-               // Replace friendica image url size with theme preference.
-               if (!empty($a->theme_info['item_image_size'])) {
-                       $ps = $a->theme_info['item_image_size'];
-                       $s = preg_replace('|(<img[^>]+src="[^"]+/photo/[0-9a-f]+)-[0-9]|', "$1-" . $ps, $s);
+               if ($attached != '') {
+                       $content .= '<div class="body-attach">' . $attached . '<div class="clear"></div></div>';
                }
 
-               $s = HTML::applyContentFilter($s, $filter_reasons);
-
-               $hook_data = ['item' => $item, 'html' => $s];
-               Hook::callAll('prepare_body_final', $hook_data);
-
-               return $hook_data['html'];
+               return $content;
        }
 
        /**
diff --git a/view/templates/audio.tpl b/view/templates/audio.tpl
new file mode 100644 (file)
index 0000000..0b0467a
--- /dev/null
@@ -0,0 +1,4 @@
+<audio src="{{$audio.src}}" controls>
+       <a href="{{$audio.src}}">{{$audio.src}}</a>
+</audio>
+<br>