The MMS lost story
-
@lduboeuf said in The MMS lost story:
Well the final goal for MMS retrieving issue is to provide a deferred download mechanism.
Currently nuntium even if Cellular-data is off try to fetch the mms and fail silently if any issue.
We would need to store the incoming WAP push notification, and propagate the issue to upper layer so that it can be tried later by user action.To be sure, we are on the same page, you are reffering to https://github.com/ubports/nuntium repository, right? Have you any exact issue in mind?
A few questions for previous maintainers or just people of knowledge, so I don't have to search and can jump on the train faster.
- How to compile and test
nuntium
. Is there any special way? What is the best pratice? Compiling on computer, then transfer files? I have only one phone and with UT as main driver and I don't want to break it for long time. - Is there any documentation/specification for MMS available?
- How to compile and test
-
@jezek said in The MMS lost story:
To be sure, we are on the same page, you are reffering to https://github.com/ubports/nuntium repository, right?
Yes
Have you any exact issue in mind?
See issues on this repo, the more important one is the deferred download (https://github.com/ubports/nuntium/issues/1)
A few questions for previous maintainers or just people of knowledge, so I don't have to search and can jump on the train faster.
How to compile and test nuntium. Is there any special way? What is the best pratice? Compiling on computer, then transfer files? I have only one phone and with UT as main driver and I don't want to break it for long time.
Normally it compiles with crossbuilder, but i was not lucky last time , or by making a PR, the CI will build nuntium for you and then you can add it with the
ubports-qa
script.Is there any documentation/specification for MMS available?
See architecture in the Readme and/or: http://docs.ubports.com/en/latest/systemdev/mms-infrastructure.html ( note that this doc is more a specification than the actual way it works; especially talking about the Incoming MMS workflow )
-
@lduboeuf thanks. I've cloned the repo locally and managed to get testcoverage script working.
$ ./scripts/testcoverage.sh ? _/home/jezek/Projects/nuntium/storage [no test files] # _/home/jezek/Projects/nuntium/ofono ofono/manager.go:100: Print call has possible formatting directive %s ofono/push.go:105: Errorf call needs 2 args but has 3 args ofono/pushagent.go:86: Print call has possible formatting directive %s FAIL _/home/jezek/Projects/nuntium/ofono [build failed] FAIL ? _/home/jezek/Projects/nuntium/telepathy [no test files] ? _/home/jezek/Projects/nuntium/test [no test files] ? _/home/jezek/Projects/nuntium/cmd/nuntium-inject-push [no test files] ? _/home/jezek/Projects/nuntium/cmd/nuntium-decode-cli [no test files] ? _/home/jezek/Projects/nuntium/cmd/nuntium [no test files] ok _/home/jezek/Projects/nuntium/mms 0.010s coverage: 45.3% of statements
It is also possible to build
cmd/nuntium
using standartgo build
procedure.I will investigate the
ubports-qa
script, to see what it is doing, cause I don't want to push, then wait for github to compile and install via script after every change. I also see couple of test tools in the project dir and a lot of reading stuff.@Flohack I see, you contributed to
nuntium
project. Do you have any insights, how to test changes, or do you know anybody who can give me a quick tutorial? -
@jezek said in The MMS lost story:
I will investigate the ubports-qa script, to see what it is doing, cause I don't want to push, then wait for github to compile and install via script after every change. I also see couple of test tools in the project dir and a lot of reading stuff.
The ubports-qa will not help you build it locally. You have to look at
crossbuilder
https://github.com/ubports/crossbuilder, it used to work, but i had no success last time ( some dependencies need to be added of course withcrossbuilder inst-foreign ...
) -
Another question, should Ubports still maintain nuntium instead of moving to a more mainstream mms service ( if any ) ?
-
Progress report:
@lduboeuf said in The MMS lost story:
The ubports-qa will not help you build it locally.
Yes, I know that. I just wanted to see, what it does. It uses
apt
command to install packages. The package is compiled on a server to a deb package.So, the build process for
nuntium
is described in repos./debian/
folder. Upon investigation I figured out it installs only 2 files. A binary to/usr/bin/nuntium
and/usr/share/upstart/sessions/nuntium.conf
which is an config for upstart.The binary
nuntium
can be compiled from the repos./cmd/nuntium/
folder usingGOOS=linux GOARCH=arm go build
command on notebook and then can be copied and replace the file on phone.If I want to replace and use the new
nuntium
binary on the phone, first the currently running process has to be stopped usinginitctl stop nuntium
. Then replace binary and start process (initctl start nuntium
).The logs in
~/.cache/upstart/nuntium.log
say, that the new (by me on notebook builded) binary is running. This means, I can compile, replace & runnuntium
. The bug hunt can start. -
@jezek nice :). I don't understand how do you build the deb though, which command ?.
[Edit]: ok re-read your postSo the defered download feature is not a bug, but never get implemented. Nuntium should be aware of the current situation e.g: if cellular-data is off or mms auto retrieval is off and notify upper layer with a special flag that there is a pending MMS before trying to get the MMS context from ofono. ( you can see where it happens in my PR ).
Nuntium should thus provide a callable method via dbus to fetch the MMS. -
@lduboeuf
If something as good as, or better, exists, and is more "up to date", why not... -
@jezek can be interesting to have: https://github.com/ubuntu-phonedations/nuntium/commit/57e4ecda2c1363daa69eb56cf962ff2fd4589bff
-
@lduboeuf said in The MMS lost story:
@jezek can be interesting to have: https://github.com/ubuntu-phonedations/nuntium/commit/57e4ecda2c1363daa69eb56cf962ff2fd4589bff
Yep, I know about that. Before any new changes I have to rewrite all imports from "ubuntu-phonedations" to "ubpors". Because of that I diffed the repo to see if everything matches and found the same code as you. Everything will be in explained in my next PR. Work in progress.
-
@jezek Awesome,
Also i had confirmation that the code from phonedation is the last work from Canonical.
-
-
It would be nice to test the PR mentioned above, so it can be merged and I can focus on furher development. I have tested it only by replacing the
nuntium
binary. Theubports-qa
method should be tested too (what should be the right command for the PR?). Write the test results to the PR comment, or here. Thank you all.Note: I did a MMS quick test (if it's working) by sending an MMS to myself. The test was successful, but I did get about 10 notifications upon delivery. Can anybody confirm, please?
-
@jezek
I will test tomorrow. The command issudo ubports-qa install PR_nuntium_5
.Thanks for making it
-
@jezek so can't wait finally, see PR comment ;-). If you want your PR to be reviewed, did you set a reviewer ? But don't be stuck if not merged ( sometimes it takes few months ^^...), just add a PR as a draft that is rebased from your PR 5.
I didn't found any issues, thanks.a lot.
-
@lduboeuf said in The MMS lost story:
Currently nuntium even if Cellular-data is off try to fetch the mms and fail silently if any issue.
We would need to store the incoming WAP push notification, and propagate the issue to upper layer so that it can be tried later by user action.I've studied the code a little bit, I now have a slight understanding of what
nuntium
does.How do you imagine the deferred download? How does it work on other system (Android, iOS, ā¦)?
My understanding is, that when
nuntium
gets MMS notification fromofono
and the contend download fails (or deferred download is enabled), thennuntium
stores the notification and sends info about the fail (or deliberate not downloading) with some identifier to thetelepathy-ofono
(like you said in quoted comment). It should also listen totelepathy-ofono
, which could ask for downloading the content for some deferred MMS. Is this right (for starter)?Note: I've seen the TODOs in the code and your PR which sends the fail message to
telepathy-ofono
, so I have a rough idea what to add or change, I'm just want to make sure I'm on the right track, before start. -
@jezek I think you have a better understanding after few hours than me in months
I don't have the whole picture, and not very comfortable about Dbus, Telepathy and such but yes i think you get the idea.
We could use something different than "received" as the status message like here: https://github.com/ubports/nuntium/blob/b43735b73d4bc549f98c9fe10a2bd56969761631/telepathy/service.go#L263
So that telepathy-ofono know that something either went wrong, or the MMS need to be downloaded with user interaction.
And yes a method to call to be able to download it. -
Failed MMS in
nuntium
progress report:I've begun a draft on
nuntium
github. There (or here?) we can talk what has to be done in other apps/packages to make it work satisfyingly.I've build my code changes over @lduboeuf 's work on reporting lost MMS by sending empty message to
telepathy-ofono
. I've wondered, why the empty message, why not change status to "failed" (or other string)? I've got the answer as soon as I tried that. The message did not go through tomessaging-app
. Why? After reading some code, I've found out, that messages are sent fromnuntium
totepepathy-ofono
and then to thehistory-service
, which saves the message to sqlite db, which then used by themessaging-app
. I've not found out (yet) where the messages with unfamiliar status get lost, so let's stick to empty message as failed indication for now.The new
nuntium
code works following way. When MMS download fails for some reason, the received mms notification with all info abut download is saved to storage before reporting the failed download (via empty message). Then we wait for user actions. Right now there are only 2 kind of actions comming tonuntium
frommessaging-app
. A "mark read" and "delete" action. Only the "delete" action is handled and it deletes the MMS fromnuntium
storage. These 2 actions come right after another after a message is read (or thread deleted) inmessaging-app
. Right now, for testing, I've connected the MMS download retry to the "delete" request (which comes after message is read). In the future there should be a separate request name (like "redownload") and the failed message should send the "delete" request only after user delete action.So for now the failed MMS will try to redownload after the empty message (failed warning) is read in
messaging-app
. To test the fail and redownload you can usenuntium-inject-push
tool (if you don't won't to or can't use real MMS). I've added a flag there (--denial-count) to simulate failed downloads.What has to be done (apart from I tidy up my code)?
- find out how to send "redownload" request for failed message form
messaging-app
at user request. - prevent sending an "delete" request for failed message on message read in
messaging-app
- make it possible to report failed message using status, not an empty message.
Help, ideas, contributions or questions are welcome.
- find out how to send "redownload" request for failed message form
-
Hi guys, I give an idea, I don't know if it's possible, I don't understand how MMS works on Ut
This is before that problem occurs.
-
Block MMS, until the mobile has good coverage it will not allow the download of the mms , put warning of Lack of coverage
-
When downloading the MMS, block the calls so that it does not hinder the download made, put a warning that the download of the mms is going to be made now.
the download is not done properly, then there is only the option of trying to download the mms again.
Regards...
-
-
@jezek said in The MMS lost story:
Failed MMS in nuntium progress report:
I've begun a draft on nuntium github. There (or here?) we can talk what has to be done in other apps/packages to make it work satisfyingly.Thank you for your implication
I've build my code changes over @lduboeuf 's work on reporting lost MMS by sending empty message to telepathy-ofono. I've wondered, why the empty message, why not change status to "failed" (or other string)? I've got the answer as soon as I tried that. The message did not go through to messaging-app. Why? After reading some code, I've found out, that messages are sent from nuntium to tepepathy-ofono and then to the history-service, which saves the message to sqlite db, which then used by the messaging-app. I've not found out (yet) where the messages with unfamiliar status get lost, so let's stick to empty message as failed indication for now.
Yes, i choosed not to modify the header, just to avoid any code change on telepathy-ofono and history-service, but i think this will be needed just to differentiate a MMS error to a MMS that need to be retrieved after user interaction
The new nuntium code works following way. When MMS download fails for some reason, the received mms notification with all info abut download is saved to storage before reporting the failed download (via empty message). Then we wait for user actions. Right now there are only 2 kind of actions comming to nuntium from messaging-app. A "mark read" and "delete" action. Only the "delete" action is handled and it deletes the MMS from nuntium storage. These 2 actions come right after another after a message is read (or thread deleted) in messaging-app. Right now, for testing, I've connected the MMS download retry to the "delete" request (which comes after message is read). In the future there should be a separate request name (like "redownload") and the failed message should send the "delete" request only after user delete action.
So for now the failed MMS will try to redownload after the empty message (failed warning) is read in messaging-app. To test the fail and redownload you can use nuntium-inject-push tool (if you don't won't to or can't use real MMS). I've added a flag there (--denial-count) to simulate failed downloads.
What has to be done (apart from I tidy up my code)?find out how to send "redownload" request for failed message form messaging-app at user request.
prevent sending an "delete" request for failed message on message read in messaging-appmake it possible to report failed message using status, not an empty message.
Help, ideas, contributions or questions are welcome.
I think you already have the whole picture
So to add some precisions, messaging-app use telephony-service library as the middle man, this is where we can add a "redownload" method, but I won't be very helpfull for implementation details as i don't really know how to work with Telepathy framework.Thanks again for your work ^ ^
Maybe, @sergiusens can give hints ? I know it is really hard to come back to a 5 years old project ^ ^