Skip to content

Commit

Permalink
feat: Link preview settings to Status chat input unfurling mode
Browse files Browse the repository at this point in the history
Changes:
1. Update privacy controller to react to external unfurling settings change
2. Add handler to input controller and react to external unfurling settings change
3. Small other fixes
  • Loading branch information
alexjba committed Oct 24, 2023
1 parent 0a857cb commit 3050e97
Show file tree
Hide file tree
Showing 10 changed files with 43 additions and 21 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -53,9 +53,10 @@ proc newController*(
result.messageService = messageService
result.settingsService = settingsService
result.linkPreviewCache = newLinkPreiewCache()
result.linkPreviewPersistentSetting = UrlUnfurlingMode.AlwaysAsk
result.linkPreviewCurrentMessageSetting = UrlUnfurlingMode.AlwaysAsk
result.linkPreviewPersistentSetting = settingsService.urlUnfurlingMode()
result.linkPreviewCurrentMessageSetting = result.linkPreviewPersistentSetting

proc onUnfurlingModeChanged(self: Controller, value: UrlUnfurlingMode)
proc onUrlsUnfurled(self: Controller, args: LinkPreviewV2DataArgs)
proc clearLinkPreviewCache*(self: Controller)

Expand Down Expand Up @@ -95,6 +96,10 @@ proc init*(self: Controller) =
let args = LinkPreviewV2DataArgs(e)
self.onUrlsUnfurled(args)

self.events.on(SIGNAL_URL_UNFURLING_MODE_UPDATED) do(e:Args):
let args = UrlUnfurlingModeArgs(e)
self.onUnfurlingModeChanged(args.value)

proc getChatId*(self: Controller): string =
return self.chatId

Expand All @@ -108,7 +113,7 @@ proc setLinkPreviewEnabledForThisMessage*(self: Controller, enabled: bool) =
proc resetLinkPreviews(self: Controller) =
self.delegate.setUrls(@[])
self.linkPreviewCache.clear()
self.linkPreviewCurrentMessageSetting = UrlUnfurlingMode.AlwaysAsk
self.linkPreviewCurrentMessageSetting = self.linkPreviewPersistentSetting
self.delegate.setAskToEnableLinkPreview(false)

proc sendImages*(self: Controller,
Expand Down Expand Up @@ -230,11 +235,16 @@ proc loadLinkPreviews*(self: Controller, urls: seq[string]) =
self.messageService.asyncUnfurlUrls(urls)

proc setLinkPreviewEnabled*(self: Controller, enabled: bool) =
if(enabled):
if enabled and self.settingsService.saveUrlUnfurlingMode(UrlUnfurlingMode.Enabled):
self.linkPreviewPersistentSetting = UrlUnfurlingMode.Enabled
self.linkPreviewCurrentMessageSetting = UrlUnfurlingMode.Enabled
else:
elif not enabled and self.settingsService.saveUrlUnfurlingMode(UrlUnfurlingMode.Disabled):
self.linkPreviewPersistentSetting = UrlUnfurlingMode.Disabled
self.linkPreviewCurrentMessageSetting = UrlUnfurlingMode.Disabled

self.delegate.setAskToEnableLinkPreview(false)

proc onUnfurlingModeChanged(self: Controller, value: UrlUnfurlingMode) =
self.linkPreviewPersistentSetting = value
self.resetLinkPreviews()
self.setText(self.delegate.getPlainText(), self.getLinkPreviewEnabled())
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,9 @@ method viewDidLoad*(self: AccessInterface) {.base.} =
method setText*(self: AccessInterface, text: string, unfurlUrls: bool) {.base.} =
raise newException(ValueError, "No implementation available")

method getPlainText*(self: AccessInterface): string =
raise newException(ValueError, "No implementation available")

method setUrls*(self: AccessInterface, urls: seq[string]) {.base.} =
raise newException(ValueError, "No implementation available")

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,9 @@ method isFavorite*(self: Module, item: GifDto): bool =
method setText*(self: Module, text: string, unfurlUrls: bool) =
self.controller.setText(text, unfurlUrls)

method getPlainText*(self: Module): string =
return self.view.getPlainText()

method clearLinkPreviewCache*(self: Module) {.slot.} =
self.controller.clearLinkPreviewCache()

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -216,6 +216,9 @@ QtObject:
proc setText*(self: View, text: string) {.slot.} =
self.delegate.setText(text, true)

proc getPlainText*(self: View): string {.slot.} =
return plain_text(self.preservedProperties.getText())

proc updateLinkPreviewsFromCache*(self: View, urls: seq[string]) =
let linkPreviews = self.delegate.linkPreviewsFromCache(urls)
self.linkPreviewModel.updateLinkPreviews(linkPreviews)
Expand Down
4 changes: 4 additions & 0 deletions src/app/modules/main/profile_section/privacy/controller.nim
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,10 @@ proc init*(self: Controller) =
var args = OperationSuccessArgs(e)
self.delegate.onPasswordChanged(args.success, args.errorMsg)

self.events.on(SIGNAL_URL_UNFURLING_MODE_UPDATED) do(e: Args):
var args = UrlUnfurlingModeArgs(e)
self.delegate.onUrlUnfurlingModeUpdated(args.value.int)

proc isMnemonicBackedUp*(self: Controller): bool =
return self.privacyService.isMnemonicBackedUp()

Expand Down
3 changes: 3 additions & 0 deletions src/app/modules/main/profile_section/privacy/io_interface.nim
Original file line number Diff line number Diff line change
Expand Up @@ -79,3 +79,6 @@ method onUserAuthenticated*(self: AccessInterface, pin: string, password: string

method backupData*(self: AccessInterface): int64 {.base.} =
raise newException(ValueError, "No implementation available")

method onUrlUnfurlingModeUpdated*(self: AccessInterface, mode: int) {.base.} =
raise newException(ValueError, "No implementation available")
3 changes: 3 additions & 0 deletions src/app/modules/main/profile_section/privacy/module.nim
Original file line number Diff line number Diff line change
Expand Up @@ -124,3 +124,6 @@ method onUserAuthenticated*(self: Module, pin: string, password: string, keyUid:

method backupData*(self: Module): int64 =
return self.controller.backupData()

method onUrlUnfurlingModeUpdated*(self: Module, mode: int) =
self.view.emitUrlUnfurlingModeUpdated(mode)
5 changes: 4 additions & 1 deletion src/app/modules/main/profile_section/privacy/view.nim
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ QtObject:
if self.getUrlUnfurlingMode() == value:
return
self.delegate.setUrlUnfurlingMode(value)
self.urlUnfurlingModeChanged()

QtProperty[int] urlUnfurlingMode:
read = getUrlUnfurlingMode
write = setUrlUnfurlingMode
Expand Down Expand Up @@ -92,3 +92,6 @@ QtObject:

proc backupData*(self: View): int {.slot.} =
return self.delegate.backupData().int

proc emitUrlUnfurlingModeUpdated*(self: View, mode: int) =
self.urlUnfurlingModeChanged()
6 changes: 3 additions & 3 deletions src/app_service/service/settings/service.nim
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ const SIGNAL_MNEMONIC_REMOVED* = "mnemonicRemoved"
const SIGNAL_SOCIAL_LINKS_UPDATED* = "socialLinksUpdated"
const SIGNAL_CURRENT_USER_STATUS_UPDATED* = "currentUserStatusUpdated"
const SIGNAL_PROFILE_MIGRATION_NEEDED_UPDATED* = "profileMigrationNeededUpdated"
const SIGNAL_URL_UNFURLING_MODEL_UPDATED* = "urlUnfurlingModeUpdated"
const SIGNAL_URL_UNFURLING_MODE_UPDATED* = "urlUnfurlingModeUpdated"

logScope:
topics = "settings-service"
Expand Down Expand Up @@ -119,7 +119,7 @@ QtObject:
self.events.emit(SIGNAL_PROFILE_MIGRATION_NEEDED_UPDATED, SettingsBoolValueArgs(value: self.settings.profileMigrationNeeded))
if settingsField.name == KEY_URL_UNFURLING_MODE:
self.settings.urlUnfurlingMode = toUrlUnfurlingMode(settingsField.value.getInt)
self.events.emit(SIGNAL_URL_UNFURLING_MODEL_UPDATED, UrlUnfurlingModeArgs(value: self.settings.urlUnfurlingMode))
self.events.emit(SIGNAL_URL_UNFURLING_MODE_UPDATED, UrlUnfurlingModeArgs(value: self.settings.urlUnfurlingMode))

if receivedData.socialLinksInfo.links.len > 0 or
receivedData.socialLinksInfo.removed:
Expand Down Expand Up @@ -501,7 +501,7 @@ QtObject:
if not self.saveSetting(KEY_URL_UNFURLING_MODE, int(value)):
return false
self.settings.urlUnfurlingMode = value
self.events.emit(SIGNAL_URL_UNFURLING_MODEL_UPDATED, UrlUnfurlingModeArgs(value: self.settings.urlUnfurlingMode))
self.events.emit(SIGNAL_URL_UNFURLING_MODE_UPDATED, UrlUnfurlingModeArgs(value: self.settings.urlUnfurlingMode))
return true

proc notifSettingAllowNotificationsChanged*(self: Service) {.signal.}
Expand Down
14 changes: 2 additions & 12 deletions ui/app/AppLayouts/Chat/views/ChatColumnView.qml
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,14 @@ import shared.popups.send 1.0
import SortFilterProxyModel 0.2

import AppLayouts.Communities.popups 1.0
import AppLayouts.Communities.panels 1.0

import "../helpers"
import "../controls"
import "../popups"
import "../panels"
import "../../Wallet"
import "../stores"
import AppLayouts.Communities.panels 1.0

Item {
id: root
Expand Down Expand Up @@ -153,8 +153,6 @@ Item {
d.restoreInputAttachments()
}

signal updateLinkPreviewsRequested

readonly property var updateLinkPreviews: {
return Backpressure.debounce(this, 250, () => {
const messageText = root.rootStore.cleanMessageText(chatInput.textInput.text)
Expand All @@ -174,14 +172,6 @@ Item {
}
}

Connections {
enabled: root.rootStore.privacyModule.urlUnfurlingMode !== Constants.UrlUnfurlingModeDisableAll
target: d
function onUpdateLinkPreviewsRequested() {
d.updateLinkPreviews()
}
}

EmptyChatPanel {
anchors.fill: parent
visible: root.activeChatId === "" || root.chatsCount == 0
Expand Down Expand Up @@ -294,7 +284,7 @@ Item {
textInput.onTextChanged: {
if (!!d.activeChatContentModule) {
d.activeChatContentModule.inputAreaModule.preservedProperties.text = textInput.text
d.updateLinkPreviewsRequested()
d.updateLinkPreviews()
}
}

Expand Down

0 comments on commit 3050e97

Please sign in to comment.