Send notification locally from QT/C++/QML App.
-
@pparent For my app, this works: https://codeberg.org/lk108/deltatouch/src/commit/d734cab514c0ee0c465b759d46c05ada322f58ca/src/plugins/DeltaHandler/notificationsLomiriPostal.cpp#L345
(but only if the app is not currently shown to the user) -
Ok then let's agree on a minimalist example that should work. Can you see why this minimalist example does NOT work?
https://github.com/pparent76/UT-notify-example
It does not work, when dbus calls are made from the code, but it does not work either with the terminal command (Whether the app is visible or not when the call is made, it does not change anything)
gdbus call --session --dest com.lomiri.Postal --object-path /com/lomiri/Postal/notify_2epparent --method com.lomiri.Postal.Post notify.pparent_notify '{"message": "foobar", "notification":{"card": {"summary": "yes", "body": "hello", "popup": true, "persist": true}}}'
-
@pparent Three things:
- In your manifest, you define a hook "notify-notify", but it should be "push":
[...] "hooks": { "notify": { "apparmor": "notify.apparmor", "desktop": "notify.desktop", "content-hub": "content-hub.json" }, "push": { "apparmor": "notify-push.apparmor", "push-helper": "notify-push-helper.json" } }, [...]
- You need to install the push helper with execution rights in CMakeLists.txt:
install(PROGRAMS pushexec DESTINATION ${CMAKE_INSTALL_PREFIX})
- I was not aware, but there actually seems to be a difference between confined and unconfined apps. The push helper of dekko is allowed to use
cp
, but for your app, it's not. So instead of the simple bash script that just sayscp $1 $2
, use python in yourpushexec
:
#!/usr/bin/python3 import sys f1, f2 = sys.argv[1:3] open(f2, "w").write(open(f1).read())
With this, your gdbus line works.
-
@lk108 said in Send notification locally from QT/C++/QML App.:
install(PROGRAMS pushexec DESTINATION ${CMAKE_INSTALL_PREFIX})
Ok it works!!! Thanks!
I guess this was the missing piece that I had seen nowhere else. ( Having PROGRAM instead of files )
I will make a version of whatsapp app with these notifications next.
Though, I still think this is not normal that it requires so many specific tweaks to do something as simple as sending a notification. At least my repo will possibly serve as a documentation for someone looking for that.
-
@pparent said in Send notification locally from QT/C++/QML App.:
I guess this was the missing piece that I had seen nowhere else. ( Having PROGRAM instead of files )
I found this by checking
journalctl -f
on the device while calling gdbus -
Ok in this version of whatsweb I have the notifications working without being unconfined, and it gets to the system panel! (Provided the app is not suspended in background)
https://github.com/pparent76/whatsweb/tree/82cd0c659af09bfad4315ba6c39e398d881451c3
-
@pparent said in Send notification locally from QT/C++/QML App.:
Ok in this version of whatsweb I have the notifications working without being unconfined, and it gets to the system panel! (Provided the app is not suspended in background)
https://github.com/pparent76/whatsweb/tree/778f2302414f75029b22ea42a136fce3440f7a29
congrats for your perseverance. Now you are in the perfect situation to update or create a documentation
-
@lduboeuf said in Send notification locally from QT/C++/QML App.:
congrats for your perseverance. Now you are in the perfect situation to update or create a documentation
Thank's I will make better than this!
I will update my QML notification module, and make a scripts that installs into an existing project all the prerequisites for it to work. Because there are some many tweaks to achieve it that it should not be done by a human, it's a loss of time, and the risk of mistake is too high. And anyway a script is always a more precise documentation on the actions to take than a human readable documentation.
-
Ps: And by the way I also plan to make this whatsapp application way more usable than it was. The version currently on my repo, already include some improvements that make the app significantly more fluid, polished and usable. But I will keep improving it progressively, and I plan to fix all the major functionalities offered by whatsapp web, that are currently broken on the app (starting with downloading/uploading photos/videos). And also I guess that future upgrade to Qt6 will also be a leap forward in regards of performance of this app, given that the webengine will be significantly more modern.
-
K Keneda marked this topic as a question
-
K Keneda has marked this topic as solved
-
@pparent if you are going to improve the app further, there is one more idea you can try; whatsapp web's service workers.
If we can figure out the service workers, we can potentially get notifications even without being unsuspended
-
My solution to the initial question:
Here is my QML module to handle local notifications:https://github.com/pparent76/UbuntuTouch-qml-notify-module
It contains a script setup-project.sh to install automatically all the requirements into the app project.
Also this push request to the whatsweb app can be pretty informative:
https://github.com/alefnode/ubports-apps/pull/44
Especially this commit that corresponds to setting up the module with setup-project.sh:
https://github.com/alefnode/ubports-apps/pull/44/commits/81d08baba14ed941ca0c9b246d0df543b0a452a6
-
@Fuseteam Seems out of my scope, and having notifications only when the app is on to me is not a real drawback, since it allows to get notifications only when you want, and quit the app otherwise.
Also in my current version I made a tweak to hide the webview when the app is not in foreground to make sure it does not compute any visual stuff in the webview in background.
In practice with this the battery usage seem very limited.
-
@pparent that's an interesting tweak— curious to see the effect
-
@Fuseteam
You can always compile and test the current version of my repo:https://github.com/pparent76/whatsweb
It already contains many improvements:
- Support for notifications
- Smoother keyboard appearance/appearance
- Avoid opening the keyboard untimely, when navigating
- Hide left panel for more pleasant interface
- Make Emoji panel usable
- Better graphical integration of navigation buttons ( back in chatview )
- Copy a message to clipboard quickly with a long push on message.
- Screensaver when the app is not foreground: hide the webview to save battery
- Fix "contact info" panel
-
P pparent has marked this topic as solved