Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
savoirfairelinux
jami-client-qt
Commits
be9dd0d0
Commit
be9dd0d0
authored
Nov 01, 2021
by
Kateryna Kostiuk
Browse files
conversation: fix long loading time for images
Change-Id: Id88cfbd571f4b504f258758bd13b4e4a91bf1b49
parent
168165a1
Changes
3
Hide whitespace changes
Inline
Side-by-side
src/commoncomponents/DataTransferMessageDelegate.qml
View file @
be9dd0d0
...
...
@@ -252,10 +252,11 @@ Loader {
Loader
{
id
:
localMediaCompLoader
anchors.right
:
isOutgoing
?
parent
.
right
:
undefined
asynchronous
:
true
width
:
sourceComponent
.
width
height
:
sourceComponent
.
height
sourceComponent
:
mediaInfo
.
isImage
!==
undefined
?
imageComp
:
imageComp
:
mediaInfo
.
isAnimatedImage
!==
undefined
?
animatedImageComp
:
avComp
Component
{
id
:
avComp
...
...
@@ -302,9 +303,9 @@ Loader {
}
}
Component
{
id
:
i
mageComp
id
:
animatedI
mageComp
AnimatedImage
{
id
:
i
mg
id
:
animatedI
mg
anchors.right
:
isOutgoing
?
parent
.
right
:
undefined
property
real
minSize
:
192
property
real
maxSize
:
256
...
...
@@ -327,6 +328,51 @@ Loader {
anchors.fill
:
parent
}
layer.enabled
:
true
layer.effect
:
OpacityMask
{
maskSource
:
MessageBubble
{
out
:
isOutgoing
type
:
seq
width
:
animatedImg
.
width
height
:
animatedImg
.
height
radius
:
msgRadius
}
}
HoverHandler
{
target
:
parent
onHoveredChanged
:
{
localMediaMsgItem
.
hoveredLink
=
hovered
?
animatedImg
.
source
:
""
}
cursorShape
:
Qt
.
PointingHandCursor
}
}
}
Component
{
id
:
imageComp
Image
{
id
:
img
anchors.right
:
isOutgoing
?
parent
.
right
:
undefined
property
real
minSize
:
192
property
real
maxSize
:
256
cache
:
true
fillMode
:
Image
.
PreserveAspectCrop
mipmap
:
true
antialiasing
:
true
autoTransform
:
false
asynchronous
:
true
source
:
"
file:///
"
+
Body
property
real
aspectRatio
:
implicitWidth
/
implicitHeight
property
real
adjustedWidth
:
Math
.
min
(
maxSize
,
Math
.
max
(
minSize
,
innerContent
.
width
-
senderMargin
))
width
:
adjustedWidth
height
:
Math
.
ceil
(
adjustedWidth
/
aspectRatio
)
Rectangle
{
color
:
JamiTheme
.
previewImageBackgroundColor
z
:
-
1
anchors.fill
:
parent
}
layer.enabled
:
true
layer.effect
:
OpacityMask
{
maskSource
:
MessageBubble
{
out
:
isOutgoing
...
...
src/messagesadapter.cpp
View file @
be9dd0d0
...
...
@@ -458,13 +458,24 @@ MessagesAdapter::conversationTypersUrlToName(const QSet<QString>& typersSet)
return
nameList
;
}
bool
QVariantMap
MessagesAdapter
::
isLocalImage
(
const
QString
&
msg
)
{
QImageReader
reader
;
reader
.
setDecideFormatFromContent
(
true
);
reader
.
setFileName
(
msg
);
return
!
reader
.
read
().
isNull
();
QByteArray
fileFormat
=
reader
.
format
();
if
(
fileFormat
==
"gif"
)
{
return
{{
"isAnimatedImage"
,
true
}};
}
QList
<
QByteArray
>
supportedFormats
=
reader
.
supportedImageFormats
();
auto
iterator
=
std
::
find_if
(
supportedFormats
.
begin
(),
supportedFormats
.
end
(),
[
fileFormat
](
QByteArray
format
)
{
return
format
==
fileFormat
;
});
if
(
iterator
!=
supportedFormats
.
end
())
{
return
{{
"isImage"
,
true
}};
}
return
{{
"isImage"
,
false
}};
}
QVariantMap
...
...
@@ -476,8 +487,9 @@ MessagesAdapter::getMediaInfo(const QString& msg)
"<%1 style='width:100%;height:%2;outline:none;background-color:#f1f3f4;"
"object-fit:cover;' "
"controls controlsList='nodownload' src='file://%3' type='%4'/></body>"
;
if
(
isLocalImage
(
msg
))
{
return
{{
"isImage"
,
true
}};
QVariantMap
fileInfo
=
isLocalImage
(
msg
);
if
(
fileInfo
[
"isImage"
].
toBool
()
||
fileInfo
[
"isAnimatedImage"
].
toBool
())
{
return
fileInfo
;
}
QRegularExpression
vPattern
(
"[^
\\
s]+(.*?)
\\
.(avi|mov|webm|webp|rmvb)$"
,
QRegularExpression
::
CaseInsensitiveOption
);
...
...
src/messagesadapter.h
View file @
be9dd0d0
...
...
@@ -101,7 +101,7 @@ protected:
Q_INVOKABLE
void
deleteInteraction
(
const
QString
&
interactionId
);
Q_INVOKABLE
void
copyToDownloads
(
const
QString
&
interactionId
,
const
QString
&
displayName
);
Q_INVOKABLE
void
userIsComposing
(
bool
isComposing
);
Q_INVOKABLE
bool
isLocalImage
(
const
QString
&
msg
);
Q_INVOKABLE
QVariantMap
isLocalImage
(
const
QString
&
msg
);
Q_INVOKABLE
QVariantMap
getMediaInfo
(
const
QString
&
msg
);
Q_INVOKABLE
bool
isRemoteImage
(
const
QString
&
msg
);
Q_INVOKABLE
QString
getFormattedTime
(
const
quint64
timestamp
);
...
...
Maxim Cournoyer
@mcournoyer
mentioned in issue
#649 (closed)
·
Jan 27, 2022
mentioned in issue
#649 (closed)
mentioned in issue #649
Toggle commit list
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment