add notifications support

first attempt

attempt 2

working notifications

add notification sound

cleanup

remove unneeded imports

remove unneded imports
This commit is contained in:
Iuri Matias 2020-07-10 17:47:31 -04:00
parent 19f358ef9c
commit 7d7bac5fb6
7 changed files with 115 additions and 4 deletions

View File

@ -125,7 +125,7 @@ QtObject:
read = getStickerList read = getStickerList
notify = activeStickerPackChanged notify = activeStickerPackChanged
proc setActiveChannel*(self: ChatsView, channel: string) = proc setActiveChannel*(self: ChatsView, channel: string) {.slot.} =
if(channel == ""): return if(channel == ""): return
self.activeChannel.setChatItem(self.chats.getChannel(self.chats.chats.findIndexById(channel))) self.activeChannel.setChatItem(self.chats.getChannel(self.chats.chats.findIndexById(channel)))
self.activeChannelChanged() self.activeChannelChanged()
@ -148,6 +148,8 @@ QtObject:
proc messagePushed*(self: ChatsView) {.signal.} proc messagePushed*(self: ChatsView) {.signal.}
proc messageNotificationPushed*(self: ChatsView, chatId: string, text: string) {.signal.}
proc messagesCleared*(self: ChatsView) {.signal.} proc messagesCleared*(self: ChatsView) {.signal.}
proc clearMessages*(self: ChatsView, id: string) = proc clearMessages*(self: ChatsView, id: string) =
@ -160,6 +162,8 @@ QtObject:
msg.alias = self.status.chat.getUserName(msg.fromAuthor, msg.alias) msg.alias = self.status.chat.getUserName(msg.fromAuthor, msg.alias)
self.messageList[msg.chatId].add(msg) self.messageList[msg.chatId].add(msg)
self.messagePushed() self.messagePushed()
if msg.chatId != self.activeChannel.id:
self.messageNotificationPushed(msg.chatId, msg.text)
proc updateUsernames*(self:ChatsView, contacts: seq[Profile]) = proc updateUsernames*(self:ChatsView, contacts: seq[Profile]) =
if contacts.len > 0: if contacts.len > 0:

View File

@ -43,8 +43,6 @@ Rectangle {
} }
} }
ScrollView { ScrollView {
id: scrollView id: scrollView
anchors.bottom: parent.bottom anchors.bottom: parent.bottom
@ -87,6 +85,6 @@ Rectangle {
} }
/*##^## /*##^##
Designer { Designer {
D{i:0;formeditorColor:"#ffffff";formeditorZoom:1.25} D{i:0;formeditorColor:"#ffffff"}
} }
##^##*/ ##^##*/

View File

@ -48,6 +48,10 @@ ScrollView {
if(chatLogView.atYEnd) if(chatLogView.atYEnd)
Qt.callLater( chatLogView.positionViewAtEnd ) Qt.callLater( chatLogView.positionViewAtEnd )
} }
onMessageNotificationPushed: function(chatId, msg) {
notificationWindow.notifyUser(chatId, msg)
}
} }
onContentYChanged: { onContentYChanged: {

View File

@ -5,12 +5,14 @@ import Qt.labs.platform 1.1
import QtQml.StateMachine 1.14 as DSM import QtQml.StateMachine 1.14 as DSM
import QtMultimedia 5.13 import QtMultimedia 5.13
import Qt.labs.settings 1.0 import Qt.labs.settings 1.0
import QtQuick.Window 2.12
import QtQml 2.13 import QtQml 2.13
import QtQuick.Window 2.0 import QtQuick.Window 2.0
import "./onboarding" import "./onboarding"
import "./app" import "./app"
import "./sounds" import "./sounds"
import "./shared"
import "./imports" import "./imports"
ApplicationWindow { ApplicationWindow {
@ -48,6 +50,12 @@ ApplicationWindow {
source: "../../../../sounds/send_message.wav" source: "../../../../sounds/send_message.wav"
} }
Audio {
id: notificationSound
audioRole: Audio.NotificationRole
source: "../../../../sounds/notification.wav"
}
Settings { Settings {
id: settings id: settings
property var chatSplitView property var chatSplitView
@ -235,6 +243,10 @@ ApplicationWindow {
} }
} }
} }
NotificationWindow {
id: notificationWindow
}
} }
/*##^## /*##^##

View File

@ -219,6 +219,7 @@ DISTFILES += \
shared/AddButton.qml \ shared/AddButton.qml \
shared/Input.qml \ shared/Input.qml \
shared/ModalPopup.qml \ shared/ModalPopup.qml \
shared/NotificationWindow.qml \
shared/PopupMenu.qml \ shared/PopupMenu.qml \
shared/Identicon.qml \ shared/Identicon.qml \
shared/CopyToClipBoardButton.qml \ shared/CopyToClipBoardButton.qml \

View File

@ -0,0 +1,91 @@
import QtQuick 2.13
import QtQuick.Controls 2.13
import QtQuick.Window 2.12
import QtQml 2.13
import "../imports"
Item {
id: root
property var chatId: ""
property var message: "hello"
Component {
id: winInit
Window {
flags: Qt.WindowStaysOnTopHint | Qt.WindowStaysOnTopHint | Qt.Popup | Qt.WA_ShowWithoutActivating | Qt.WindowStaysOnTopHint | Qt.BypassWindowManagerHint | Qt.WindowStaysOnTopHint
width: 1
height: 1
Component.onCompleted: {
requestActivate()
mainWin.createObject(root)
}
}
}
Component {
id: mainWin
Window {
id: notificationWindowSub
flags: Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint | Qt.WA_ShowWithoutActivating | Qt.BypassWindowManagerHint | Qt.WindowStaysOnTopHint | Qt.BypassWindowManagerHint
x: Screen.width - 250
y: 50
width: 200
height: 100
visible: true
Rectangle {
anchors.fill: parent
color: "white"
Text {
anchors.centerIn: parent
text: message
MouseArea {
cursorShape: Qt.PointingHandCursor
anchors.fill: parent
onClicked: {
timer.stop()
notificationWindowSub.close()
applicationWindow.raise()
chatsModel.setActiveChannel(chatId);
}
}
}
}
Timer {
id: timer
interval: 4000;
running: false;
repeat: false
onTriggered: notificationWindowSub.close()
}
onVisibleChanged: {
if(visible) {
timer.running = true;
if (applicationWindow.active) {
this.flags |= Qt.Popup
} else {
this.flags = Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint | Qt.WA_ShowWithoutActivating | Qt.BypassWindowManagerHint | Qt.WindowStaysOnTopHint | Qt.BypassWindowManagerHint
}
}
}
}
}
function notifyUser(chatId, msg) {
this.chatId = chatId
this.message = msg
notificationSound.play()
var w1 = winInit.createObject(null)
w1.destroy()
}
}
/*##^##
Designer {
D{i:0;autoSize:true;height:480;width:640}
}
##^##*/

View File

@ -16,3 +16,4 @@ Identicon 1.0 Identicon.qml
RoundedImage 1.0 RoundedImage.qml RoundedImage 1.0 RoundedImage.qml
SplitViewHandle 1.0 SplitViewHandle.qml SplitViewHandle 1.0 SplitViewHandle.qml
CopyToClipBoardButton 1.0 CopyToClipBoardButton.qml CopyToClipBoardButton 1.0 CopyToClipBoardButton.qml
NotificationWindow 1.0 NotificationWindow.qml