Fixup Logic for Custom Profile Image Downloads (restrict to Accepted contacts), stronger defaults #71

Merged
erinn merged 4 commits from profile_images_bugfixes into trunk 2022-02-08 21:17:31 +00:00
1 changed files with 25 additions and 14 deletions
Showing only changes of commit 8040385681 - Show all commits

View File

@ -3,6 +3,7 @@ package utils
import ( import (
"encoding/json" "encoding/json"
"fmt" "fmt"
"os"
"strconv" "strconv"
"cwtch.im/cwtch/app" "cwtch.im/cwtch/app"
@ -113,7 +114,8 @@ func (eh *EventHandler) handleAppBusEvent(e *event.Event) string {
// If the user has chosen to block unknown profiles // If the user has chosen to block unknown profiles
// then explicitly configure the protocol engine to do so.. // then explicitly configure the protocol engine to do so..
if ReadGlobalSettings().BlockUnknownConnections { settings := ReadGlobalSettings()
if settings.BlockUnknownConnections {
profile.BlockUnknownConnections() profile.BlockUnknownConnections()
} else { } else {
// For completeness // For completeness
@ -181,7 +183,7 @@ func (eh *EventHandler) handleAppBusEvent(e *event.Event) string {
if conversationInfo.IsGroup() { if conversationInfo.IsGroup() {
cpicPath = RandomGroupImage(conversationInfo.Handle) cpicPath = RandomGroupImage(conversationInfo.Handle)
} else { } else {
cpicPath = GetProfileImage(profile, conversationInfo) cpicPath = GetProfileImage(profile, conversationInfo, settings.DownloadPath)
} }
// Resolve Save History Setting // Resolve Save History Setting
@ -255,12 +257,16 @@ func (eh *EventHandler) handleAppBusEvent(e *event.Event) string {
return string(json) return string(json)
} }
func GetProfileImage(profile peer.CwtchPeer, conversationInfo *model.Conversation) string { func GetProfileImage(profile peer.CwtchPeer, conversationInfo *model.Conversation, basepath string) string {
fileKey, err := profile.GetConversationAttribute(conversationInfo.ID, attr.PublicScope.ConstructScopedZonedPath(attr.ProfileZone.ConstructZonedPath(constants.CustomProfileImageKey))) fileKey, err := profile.GetConversationAttribute(conversationInfo.ID, attr.PublicScope.ConstructScopedZonedPath(attr.ProfileZone.ConstructZonedPath(constants.CustomProfileImageKey)))
if err == nil { if err == nil {
if _, exists := profile.GetScopedZonedAttribute(attr.LocalScope, attr.FilesharingZone, fmt.Sprintf("%s.complete", fileKey)); exists { if _, exists := profile.GetScopedZonedAttribute(attr.LocalScope, attr.FilesharingZone, fmt.Sprintf("%s.complete", fileKey)); exists {
image, _ := profile.GetScopedZonedAttribute(attr.LocalScope, attr.FilesharingZone, fmt.Sprintf("%s.path", fileKey)) fp, _ := filesharing.GenerateDownloadPath(basepath, fileKey, true)
return image // check if the file exists...if it does then set the path...
if _, err := os.Stat(fp); err == nil {
image, _ := profile.GetScopedZonedAttribute(attr.LocalScope, attr.FilesharingZone, fmt.Sprintf("%s.path", fileKey))
return image
}
} }
} }
return RandomProfileImage(conversationInfo.Handle) return RandomProfileImage(conversationInfo.Handle)
@ -284,7 +290,7 @@ func (eh *EventHandler) handleProfileEvent(ev *EventProfileEnvelope) string {
if ci != nil && err == nil { if ci != nil && err == nil {
ev.Event.Data[event.ConversationID] = strconv.Itoa(ci.ID) ev.Event.Data[event.ConversationID] = strconv.Itoa(ci.ID)
profile.SetConversationAttribute(ci.ID, attr.LocalScope.ConstructScopedZonedPath(attr.ProfileZone.ConstructZonedPath(constants2.Archived)), event.False) profile.SetConversationAttribute(ci.ID, attr.LocalScope.ConstructScopedZonedPath(attr.ProfileZone.ConstructZonedPath(constants2.Archived)), event.False)
ev.Event.Data[constants2.Picture] = GetProfileImage(profile, ci) ev.Event.Data[constants2.Picture] = GetProfileImage(profile, ci, ReadGlobalSettings().DownloadPath)
} else { } else {
// TODO This Conversation May Not Exist Yet...But we are not in charge of creating it... // TODO This Conversation May Not Exist Yet...But we are not in charge of creating it...
log.Errorf("todo wait for contact to be added before processing this event...") log.Errorf("todo wait for contact to be added before processing this event...")
@ -318,7 +324,7 @@ func (eh *EventHandler) handleProfileEvent(ev *EventProfileEnvelope) string {
ev.Event.Data["Nick"] = ev.Event.Data["RemotePeer"] ev.Event.Data["Nick"] = ev.Event.Data["RemotePeer"]
} }
} }
ev.Event.Data[constants2.Picture] = GetProfileImage(profile, ci) ev.Event.Data[constants2.Picture] = GetProfileImage(profile, ci, ReadGlobalSettings().DownloadPath)
} }
conversationID, _ := strconv.Atoi(ev.Event.Data[event.ConversationID]) conversationID, _ := strconv.Atoi(ev.Event.Data[event.ConversationID])
@ -449,18 +455,23 @@ func (eh *EventHandler) handleProfileEvent(ev *EventProfileEnvelope) string {
fileKey := val fileKey := val
fsf, err := filesharing.FunctionalityGate(settings.Experiments) fsf, err := filesharing.FunctionalityGate(settings.Experiments)
imagePreviewsEnabled := settings.Experiments["filesharing-images"] imagePreviewsEnabled := settings.Experiments["filesharing-images"]
if err == nil && imagePreviewsEnabled { if err == nil && imagePreviewsEnabled && conversation.Accepted {
if _, exists := profile.GetScopedZonedAttribute(attr.LocalScope, attr.FilesharingZone, fmt.Sprintf("%s.complete", fileKey)); exists {
basepath := settings.DownloadPath
fp, _ := filesharing.GenerateDownloadPath(basepath, fileKey, true)
if _, err := os.Stat(fp); err == nil {
// file is marked as completed downloaded and exists...
return ""
}
}
basepath := settings.DownloadPath basepath := settings.DownloadPath
fp, mp := filesharing.GenerateDownloadPath(basepath, fileKey, true) fp, mp := filesharing.GenerateDownloadPath(basepath, fileKey, true)
log.Debugf("Downloading Profile Image %v %v %v", fp, mp, fileKey) log.Debugf("Downloading Profile Image %v %v %v", fp, mp, fileKey)
ev.Event.Data[event.FilePath] = fp ev.Event.Data[event.FilePath] = fp
if _, exists := profile.GetScopedZonedAttribute(attr.LocalScope, attr.FilesharingZone, fmt.Sprintf("%s.complete", fileKey)); exists { ev.Event.Data[event.FileDownloadFinished] = constants.False
ev.Event.Data[event.FileDownloadFinished] = constants.True fsf.DownloadFile(profile, conversation.ID, fp, mp, val, constants.ImagePreviewMaxSizeInBytes)
} else {
ev.Event.Data[event.FileDownloadFinished] = constants.False
fsf.DownloadFile(profile, conversation.ID, fp, mp, val, constants.ImagePreviewMaxSizeInBytes)
}
} else { } else {
// if image previews are disabled then ignore this event...
return "" return ""
} }
} }