Fixup Logic for Custom Profile Image Downloads (restrict to Accepted contacts), stronger defaults #71
|
@ -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,14 +257,18 @@ 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 {
|
||||||
|
fp, _ := filesharing.GenerateDownloadPath(basepath, fileKey, true)
|
||||||
|
// 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))
|
image, _ := profile.GetScopedZonedAttribute(attr.LocalScope, attr.FilesharingZone, fmt.Sprintf("%s.path", fileKey))
|
||||||
return image
|
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.True
|
|
||||||
} else {
|
|
||||||
ev.Event.Data[event.FileDownloadFinished] = constants.False
|
ev.Event.Data[event.FileDownloadFinished] = constants.False
|
||||||
fsf.DownloadFile(profile, conversation.ID, fp, mp, val, constants.ImagePreviewMaxSizeInBytes)
|
fsf.DownloadFile(profile, conversation.ID, fp, mp, val, constants.ImagePreviewMaxSizeInBytes)
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
|
// if image previews are disabled then ignore this event...
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Reference in New Issue