Support encrypted file reading & caching

Also don't convert palette images to JPEG when creating thumbnails.
This commit is contained in:
miruka
2019-11-04 14:37:25 -04:00
parent bf9ced1acd
commit 2d682516e8
9 changed files with 122 additions and 60 deletions

View File

@@ -21,6 +21,7 @@ HImage {
property string mxc
property string sourceOverride: ""
property bool thumbnail: true
property var cryptDict: ({})
property bool show: false
property string cachedPath: ""
@@ -45,7 +46,8 @@ HImage {
}
let method = image.thumbnail ? "get_thumbnail" : "get_media"
let args = image.thumbnail ? [image.mxc, w, h] : [image.mxc]
let args = image.thumbnail ?
[image.mxc, w, h, cryptDict] : [image.mxc, cryptDict]
py.callClientCoro(
clientUserId, "media_cache." + method, args, path => {

View File

@@ -36,14 +36,14 @@ Column {
readonly property bool smallAvatar:
eventList.canCombine(model, nextItem) &&
(model.event_type == "RoomMessageEmote" ||
(model.event_type === "RoomMessageEmote" ||
! model.event_type.startsWith("RoomMessage"))
readonly property bool collapseAvatar: combine
readonly property bool hideAvatar: onRight
readonly property bool hideNameLine:
model.event_type == "RoomMessageEmote" ||
model.event_type === "RoomMessageEmote" ||
! model.event_type.startsWith("RoomMessage") ||
onRight ||
combine

View File

@@ -14,6 +14,9 @@ HMxcImage {
mxc: thumbnail ?
(loader.thumbnailMxc || loader.mediaUrl) :
(loader.mediaUrl || loader.thumbnailMxc)
cryptDict: thumbnail && loader.thumbnailMxc ?
loader.singleMediaInfo.thumbnail_crypt_dict :
loader.singleMediaInfo.media_crypt_dict
property EventMediaLoader loader

View File

@@ -71,6 +71,7 @@ HTileDelegate {
let ev = model.data.last_event
// If it's an emote or non-message/media event
if (ev.event_type === "RoomMessageEmote" ||
! ev.event_type.startsWith("RoomMessage")) {
return Utils.processedEventText(ev)

View File

@@ -109,6 +109,7 @@ function processedEventText(ev) {
}
if (ev.event_type.startsWith("RoomMessage")) { return ev.content }
if (ev.event_type.startsWith("RoomEncrypted")) { return ev.content }
let text = qsTr(ev.content).arg(
coloredNameHtml(ev.sender_name, ev.sender_id)