Explorar o código

Don't render OOB url if it's the same as the body

Otherwise the file gets shown/rendered twice.
JC Brand %!s(int64=3) %!d(string=hai) anos
pai
achega
5095027a0b

+ 0 - 4
src/plugins/chatview/tests/http-file-upload.js

@@ -274,10 +274,6 @@ describe("XEP-0363: HTTP File Upload", function () {
                     expect(img_link_el.outerHTML.replace(/<!-.*?->/g, '').trim()).toEqual(
                         `<a class="chat-image__link" target="_blank" rel="noopener" href="${base_url}/logo/conversejs-filled.svg">`+
                         `<img class="chat-image img-thumbnail" src="${base_url}/logo/conversejs-filled.svg"></a>`);
-
-                    expect(view.querySelector('.chat-msg .chat-msg__media').innerHTML.replace(/<!-.*?->/g, '').trim()).toEqual(
-                        `<a target="_blank" rel="noopener" href="${base_url}/logo/conversejs-filled.svg">`+
-                        `Download file "conversejs-filled.svg"</a>`);
                     XMLHttpRequest.prototype.send = send_backup;
                 }));
 

+ 15 - 12
src/plugins/chatview/tests/oob.js

@@ -31,7 +31,7 @@ describe("A Chat Message", function () {
             expect(msg.classList.length).toEqual(1);
             expect(u.hasClass('chat-msg__text', msg)).toBe(true);
             expect(msg.textContent).toEqual('Have you heard this funny audio?');
-            let media = view.querySelector('.chat-msg .chat-msg__media');
+            const media = view.querySelector('.chat-msg .chat-msg__media');
             expect(media.innerHTML.replace(/<!-.*?->/g, '').replace(/(\r\n|\n|\r)/gm, "").trim()).toEqual(
                 `<audio controls="" src="https://montague.lit/audio.mp3"></audio>`+
                 `<a target="_blank" rel="noopener" href="https://montague.lit/audio.mp3">${url}</a>`);
@@ -41,15 +41,21 @@ describe("A Chat Message", function () {
                 <message from="${contact_jid}"
                          type="chat"
                          to="romeo@montague.lit/orchard">
-                    <body>https://montague.lit/audio.mp3</body>
-                    <x xmlns="jabber:x:oob"><url>https://montague.lit/audio.mp3</url></x>
+                    <body>${url}</body>
+                    <x xmlns="jabber:x:oob"><url>${url}</url></x>
                 </message>`);
             _converse.connection._dataRecv(mock.createRequest(stanza));
+
             await new Promise(resolve => view.model.messages.once('rendered', resolve));
-            msg = view.querySelector('.chat-msg:last-child .chat-msg__text');
+            msg = view.querySelector('.chat-msg .chat-msg__text');
             expect(msg.innerHTML.replace(/<!-.*?->/g, '')).toEqual('Have you heard this funny audio?'); // Emtpy
-            media = view.querySelector('.chat-msg:last-child .chat-msg__media');
-            expect(media.innerHTML.replace(/<!-.*?->/g, '').replace(/(\r\n|\n|\r)/gm, "").trim()).toEqual(
+
+            // We don't render the OOB data
+            expect(view.querySelector('converse-chat-message:last-child .chat-msg__media')).toBe(null);
+
+            // But we do render the body
+            const msg_el = view.querySelector('converse-chat-message:last-child .chat-msg__text');
+            await u.waitUntil(() => msg_el.innerHTML.replace(/<!-.*?->/g, '').replace(/(\r\n|\n|\r)/gm, "").trim() ===
                 `<audio controls="" src="https://montague.lit/audio.mp3"></audio>`+
                 `<a target="_blank" rel="noopener" href="${url}">${url}</a>`);
         }));
@@ -78,7 +84,7 @@ describe("A Chat Message", function () {
             let msg = view.querySelector('.chat-msg .chat-msg__text');
             expect(msg.classList.length).toBe(1);
             expect(msg.textContent).toEqual('Have you seen this funny video?');
-            let media = view.querySelector('.chat-msg .chat-msg__media');
+            const media = view.querySelector('.chat-msg .chat-msg__media');
             expect(media.innerHTML.replace(/(\r\n|\n|\r)/gm, "").replace(/<!-.*?->/g, '')).toEqual(
                 `<video controls="" preload="metadata" src="${Strophe.xmlescape(url)}"></video>`+
                 `<a target="_blank" rel="noopener" href="${Strophe.xmlescape(url)}">${Strophe.xmlescape(url)}</a>`);
@@ -93,12 +99,9 @@ describe("A Chat Message", function () {
                 </message>`);
             _converse.connection._dataRecv(mock.createRequest(stanza));
             await new Promise(resolve => view.model.messages.once('rendered', resolve));
-            msg = view.querySelector('.chat-msg:last-child .chat-msg__text');
+            msg = view.querySelector('converse-chat-message .chat-msg__text');
             expect(msg.innerHTML.replace(/<!-.*?->/g, '')).toEqual('Have you seen this funny video?');
-            media = view.querySelector('.chat-msg:last-child .chat-msg__media');
-            expect(media.innerHTML.replace(/(\r\n|\n|\r)/gm, "").replace(/<!-.*?->/g, '')).toEqual(
-                `<video controls="" preload="metadata" src="${Strophe.xmlescape(url)}"></video>`+
-                `<a target="_blank" rel="noopener" href="${Strophe.xmlescape(url)}">${Strophe.xmlescape(url)}</a>`);
+            expect(view.querySelector('converse-chat-message:last-child .chat-msg__media')).toBe(null);
         }));
 
         it("will render download links for files from oob URLs",

+ 1 - 4
src/plugins/muc-views/tests/http-file-upload.js

@@ -141,10 +141,7 @@ describe("XEP-0363: HTTP File Upload", function () {
                         `<a class="chat-image__link" target="_blank" rel="noopener" href="${base_url}/logo/conversejs-filled.svg">`+
                         `<img class="chat-image img-thumbnail" src="${base_url}/logo/conversejs-filled.svg"></a>`);
 
-                    expect(view.querySelector('.chat-msg .chat-msg__media').innerHTML.replace(/<!-.*?->/g, '').trim()).toEqual(
-                        `<a target="_blank" rel="noopener" href="${base_url}/logo/conversejs-filled.svg">`+
-                        `Download file "conversejs-filled.svg"</a>`);
-
+                    expect(view.querySelector('.chat-msg .chat-msg__media')).toBe(null);
                     XMLHttpRequest.prototype.send = send_backup;
                 }));
 

+ 2 - 2
src/plugins/omemo/tests/media-sharing.js

@@ -142,8 +142,8 @@ describe("The OMEMO module", function() {
                 `<encryption namespace="eu.siacs.conversations.axolotl" xmlns="urn:xmpp:eme:0"/>`+
             `</message>`);
 
-        const link_el = await u.waitUntil(() => view.querySelector('.chat-msg__media'));
-        expect(link_el.textContent.trim()).toBe('Download file "secret.txt"', 1000);
+        const link_el = await u.waitUntil(() => view.querySelector('.chat-msg__text'));
+        expect(link_el.textContent.trim()).toBe(url);
 
         const message = view.model.messages.at(0);
         expect(message.get('is_encrypted')).toBe(true);

+ 2 - 1
src/shared/chat/templates/message-text.js

@@ -25,6 +25,7 @@ export default (el) => {
     `;
     const spoiler_classes = el.model.get('is_spoiler') ? `spoiler ${el.model.get('is_spoiler_visible') ? '' : 'hidden'}` : '';
     const text = el.model.getMessageText();
+    const show_oob = el.model.get('oob_url') && text !== el.model.get('oob_url');
     return html`
         ${ el.model.get('is_spoiler') ? tpl_spoiler_hint : '' }
         ${ el.model.get('subject') ? html`<div class="chat-msg__subject">${el.model.get('subject')}</div>` : '' }
@@ -41,7 +42,7 @@ export default (el) => {
             ${ (el.model.get('received') && !el.model.isMeCommand() && !is_groupchat_message) ? html`<span class="fa fa-check chat-msg__receipt"></span>` : '' }
             ${ (el.model.get('edited')) ? tpl_edited_icon(el) : '' }
         </span>
-        ${ el.model.get('oob_url') ? html`<div class="chat-msg__media">${getOOBURLMarkup(el.model.get('oob_url'))}</div>` : '' }
+        ${ show_oob ? html`<div class="chat-msg__media">${getOOBURLMarkup(el.model.get('oob_url'))}</div>` : '' }
         <div class="chat-msg__error">${ el.model.get('error_text') || el.model.get('error') }</div>
     `;
 }