diff --git a/src/webkitchatcontainer.cpp b/src/webkitchatcontainer.cpp index 176172ce7490e3342d3909bb171d6500dabd00bc..d326d91ce43c0bb3dff1795e5add376d99195e64 100644 --- a/src/webkitchatcontainer.cpp +++ b/src/webkitchatcontainer.cpp @@ -487,10 +487,11 @@ build_view(WebKitChatContainer *view) NULL ); + // file:// allow the webview to load local files webkit_web_view_load_html( WEBKIT_WEB_VIEW(priv->webview_chat), (gchar*) g_bytes_get_data(chatview_bytes, NULL), - NULL + "file://" ); /* Now we wait for the load-changed event, before we diff --git a/web/chatview.html b/web/chatview.html index cf11b402d9f93d2a3c698dd2b224f941485fa538..9ceff8c0c9c369431c1af749c1be7fadc130f93f 100644 --- a/web/chatview.html +++ b/web/chatview.html @@ -427,14 +427,39 @@ ring.chatview = (function(){ * @param message_div the message to update * @param message_object new informations */ - function updateFileInteraction(message_div, message_object) { + function updateFileInteraction(message_div, message_object, forceTypeToFile = false) { + if (!message_div.querySelector('.informations')) return // media + var acceptSvg = '', refuseSvg = '', fileSvg = '', warningSvg = '' - var message_delivery_status = message_object["delivery_status"]; - var message_direction = message_object["direction"]; - var message_id = message_object["id"]; + var message_delivery_status = message_object["delivery_status"] + var message_direction = message_object["direction"] + var message_id = message_object["id"] + var message_text = message_object['text'] + + + if (isImage(message_text) && message_delivery_status === 'finished' && displayLinksEnabled && !forceTypeToFile) { + // Replace the old wrapper by the downloaded image + if (message_div.querySelector('.message_wrapper')) { + wrapper = message_div.querySelector('.message_wrapper') + wrapper.parentNode.removeChild(wrapper) + } + message_div.append(mediaInteraction(message_id, message_text)) + message_div.querySelector('img').id = message_id + message_div.querySelector('img').msg_obj = message_object + message_div.querySelector('img').onerror = function() { + message_div = document.querySelector('#message_' + this.id); + if (message_div.querySelector('.message_wrapper')) { + wrapper = message_div.querySelector('.message_wrapper') + wrapper.parentNode.removeChild(wrapper) + } + message_div.append(fileInteraction(message_id)) + updateFileInteraction(message_div, this.msg_obj, true) + } + return + } // Set informations text var informations_div = message_div.querySelector(".informations"); @@ -483,8 +508,10 @@ ring.chatview = (function(){ left_buttons.appendChild(status_button); } - message_div.querySelector('.full').innerText = message_object['text'] - message_div.querySelector('.filename').innerText = message_object['text'].split('/').pop() + message_div.querySelector('.full').innerText = message_text + message_div.querySelector('.filename').innerText = message_text.split('/').pop() + message_div.querySelector('.filename').innerText = message_text.split('/').pop() + updateProgressBar(message_div.querySelector('.message_progress_bar'), message_object); updateProgressBar(message_div.querySelector('.message_progress_bar'), message_object); } @@ -493,7 +520,7 @@ ring.chatview = (function(){ * @param file */ function isImage(file) { - return file.match(/\.(jpeg|jpg|gif|png)$/) !== null + return file.toLowerCase().match(/\.(jpeg|jpg|gif|png)$/) !== null } /** @@ -514,7 +541,7 @@ ring.chatview = (function(){ * @param link to show * @param ytid if it's a youtube video */ - function mediaInteraction(message_id, link, ytid) { + function mediaInteraction(message_id, link, ytid, noerror) { // TODO promise? // Try to display images. const media_wrapper = document.createElement('div') @@ -526,7 +553,8 @@ ring.chatview = (function(){ // Note, here, we don't check the size of the image. // in the future, we can check the content-type and content-length with a request // and maybe disable svg - imageElt.setAttribute('onerror', 'this.style.display=\'none\'') + if (noerror) + imageElt.setAttribute('onerror', 'this.style.display=\'none\'') if (ytid) { imageElt.src = `http://img.youtube.com/vi/${ytid}/0.jpg` } else { @@ -730,8 +758,22 @@ ring.chatview = (function(){ // Build main content if (message_type === 'data_transfer') { - type = 'fileInteraction' + if (isImage(message_text) && delivery_status === 'finished' && displayLinksEnabled) { + message_div.append(mediaInteraction(message_id, message_text, null, false)) + message_div.querySelector('img').id = message_id + message_div.querySelector('img').msg_obj = message_object + message_div.querySelector('img').onerror = function() { + message_div = document.querySelector('#message_' + this.id); + if (message_div.querySelector('.message_wrapper')) { + wrapper = message_div.querySelector('.message_wrapper') + wrapper.parentNode.removeChild(wrapper) + } + message_div.append(fileInteraction(message_id)) + updateFileInteraction(message_div, this.msg_obj, true) + } + } else { message_div.append(fileInteraction(message_id)) + } } else if (message_type === 'text') { // TODO add the possibility to update messages (remove and rebuild) const htmlText = getMessageHtml(message_text)