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)