jami-libclient issueshttps://git.jami.net/savoirfairelinux/jami-libclient/-/issues2018-10-21T13:47:12Zhttps://git.jami.net/savoirfairelinux/jami-libclient/-/issues/400account (un)register: bad daemon method used, setAccountActive never called2018-10-21T13:47:12ZHugo Lefeuvreaccount (un)register: bad daemon method used, setAccountActive never calledThe setAccountActive() method from the daemon API is not used by the new LRC.
```
220 void
221 NewAccountModel::enableAccount(const std::string& accountId, bool enabled)
222 {
223 auto accountInfo = pimpl_->accounts.find(accountId);...The setAccountActive() method from the daemon API is not used by the new LRC.
```
220 void
221 NewAccountModel::enableAccount(const std::string& accountId, bool enabled)
222 {
223 auto accountInfo = pimpl_->accounts.find(accountId);
224 if (accountInfo == pimpl_->accounts.end()) {
225 throw std::out_of_range("NewAccountModel::getAccountConfig, can't find " + accountId);
226 }
227 accountInfo->second.enabled = enabled;
228 }
```
Instead, the account is registered and unregistered via setAccountdetails(). Obviously, this is not a very good idea. It might even be the root of our issues with the register/unregister feature.Hugo LefeuvreHugo Lefeuvrehttps://git.jami.net/savoirfairelinux/jami-libclient/-/issues/399Document how LRC is structured.2019-11-21T04:53:12ZSébastien BlinDocument how LRC is structured.In https://git.ring.cx/savoirfairelinux/ring-project/wikis/homeIn https://git.ring.cx/savoirfairelinux/ring-project/wikis/homeNew media APISébastien BlinSébastien Blinhttps://git.jami.net/savoirfairelinux/jami-libclient/-/issues/398Video API2018-12-11T22:42:00ZSébastien BlinVideo APIWe should be able to:
+ List devices
+ Get current device
+ Configure devices
# Patch
https://gerrit-ring.savoirfairelinux.com/c/ring-lrc/+/10319
We should be able to:
+ List devices
+ Get current device
+ Configure devices
# Patch
https://gerrit-ring.savoirfairelinux.com/c/ring-lrc/+/10319
New media APISébastien BlinSébastien Blinhttps://git.jami.net/savoirfairelinux/jami-libclient/-/issues/397Audio API2018-12-11T22:42:03ZSébastien BlinAudio APIWe should be able to:
+ List devices
+ Get current device
+ Configure devices
# Patch
https://gerrit-ring.savoirfairelinux.com/c/ring-lrc/+/10319
We should be able to:
+ List devices
+ Get current device
+ Configure devices
# Patch
https://gerrit-ring.savoirfairelinux.com/c/ring-lrc/+/10319
New media APISébastien BlinSébastien Blinhttps://git.jami.net/savoirfairelinux/jami-libclient/-/issues/396new Renderer implementation2018-12-11T22:42:01ZSébastien Blinnew Renderer implementationThe new API should provide the necessary functions to render a call and preview. Moreover, this should also fix the issue when a crash occurs when the preview is open.
# Patch
https://gerrit-ring.savoirfairelinux.com/c/ring-lrc/+/10319
The new API should provide the necessary functions to render a call and preview. Moreover, this should also fix the issue when a crash occurs when the preview is open.
# Patch
https://gerrit-ring.savoirfairelinux.com/c/ring-lrc/+/10319
New media APISébastien BlinSébastien Blinhttps://git.jami.net/savoirfairelinux/jami-libclient/-/issues/395Define new media API for clients2018-12-11T22:41:55ZSébastien BlinDefine new media API for clientsThe AVModel class should be completed to provide an API to manage Renderers, Video and Audio devices.
# Patch
https://gerrit-ring.savoirfairelinux.com/c/ring-lrc/+/10319
The AVModel class should be completed to provide an API to manage Renderers, Video and Audio devices.
# Patch
https://gerrit-ring.savoirfairelinux.com/c/ring-lrc/+/10319
New media APISébastien BlinSébastien Blinhttps://git.jami.net/savoirfairelinux/jami-libclient/-/issues/394Migrate Medias to new LRC2018-12-11T22:42:14ZSébastien BlinMigrate Medias to new LRCSprint meta.
# TODO
## Call view
+ [x] Get Video's input (name/resolutions/etc)
+ [x] Get Audio's input (name/resolutions/etc)
+ [x] Add the ability to change the input
+ [x] Video
+ [x] Monitor (full/area)
+ [x] Stream fi...Sprint meta.
# TODO
## Call view
+ [x] Get Video's input (name/resolutions/etc)
+ [x] Get Audio's input (name/resolutions/etc)
+ [x] Add the ability to change the input
+ [x] Video
+ [x] Monitor (full/area)
+ [x] Stream file
+ [x] Get advanced informations (call id/resolutions/codecs) from current side and peer
+ [x] Classes not based on Call and Profiles from old LRC
+ [x] Verify old options (pause/mute/recording/quality)
+ [x] Crash client without daemon resilient?
## Avatar view & Let a message view
+ [x] Preview rendered
## Media settings
+ [x] Enable hardware decoding
+ [x] Set managers / devices for audio and video
# Issues + estimates:
+ #395 = 1d
+ #396 = 2d
+ #397 = 2d
+ #398 = 1d
+ #399 = 1dNew media APISébastien BlinSébastien Blinhttps://git.jami.net/savoirfairelinux/jami-libclient/-/issues/393Redo slotAccountStatusChanged2018-10-18T01:51:29ZSébastien BlinRedo slotAccountStatusChangedRedo
```
if (accountInfo.profileInfo.type != profile::Type::SIP) {
// HACK TODO(sblin) change daemon or add signal to know when a Ring
// account is ready (when the keys are generated and the id present)
if (s...Redo
```
if (accountInfo.profileInfo.type != profile::Type::SIP) {
// HACK TODO(sblin) change daemon or add signal to know when a Ring
// account is ready (when the keys are generated and the id present)
if (status == api::account::Status::REGISTERED && accountInfo.profileInfo.uri.empty()) {
// This part detect when a new Ring account is created.
accounts.erase(accountID);
addToAccounts(accountID);
emit linked.accountAdded(accountID);
} else if (!accountInfo.profileInfo.uri.empty()) {
accountInfo.status = status;
emit linked.accountStatusChanged(accountID);
}
} else {
accountInfo.status = status;
emit linked.accountStatusChanged(accountID);
}
```
This is dirty!
There is a lot to say, but two main points:
1. The account creation detection must not happen here
2. SIP signals are bugguy.Sébastien BlinSébastien Blinhttps://git.jami.net/savoirfairelinux/jami-libclient/-/issues/392Invalid call state transition blocks incoming call view in "finished" state2018-09-28T13:58:45ZHugo LefeuvreInvalid call state transition blocks incoming call view in "finished" state**How to reproduce (GNOME client)**:
* call a contact
* stop the call using the hangup button while the call is still in "searching" state
The incomingcallview will remain open forever because no showChatView signal is emitted.
This is...**How to reproduce (GNOME client)**:
* call a contact
* stop the call using the hangup button while the call is still in "searching" state
The incomingcallview will remain open forever because no showChatView signal is emitted.
This is because of an invalid SEARCHING -> ENDED call state transition.
The call state machine expects a two step state transition: the daemon should first transition to a terminating state, and then to OVER. This is almost always the case, expect for the SEARCHING state.
In fact this state is a bit special since it does not correspond to any well defined daemon state.
In order to avoid issues resulting from an invalid SEARCHING -> ENDED transition, we should add a temporary state transition to TERMINATING before going on with OVER.Hugo LefeuvreHugo Lefeuvrehttps://git.jami.net/savoirfairelinux/jami-libclient/-/issues/391Broken Ring InfoHash support2018-09-20T20:54:35ZHugo LefeuvreBroken Ring InfoHash support20e8d7b3 has broken Ring InfoHash support in the smartlist.20e8d7b3 has broken Ring InfoHash support in the smartlist.Hugo LefeuvreHugo Lefeuvrehttps://git.jami.net/savoirfairelinux/jami-libclient/-/issues/390Regression: presence broken by 20e8d7b32018-09-12T16:20:33ZHugo LefeuvreRegression: presence broken by 20e8d7b3Presence is not working anymore since 20e8d7b3. It seems like URI scheme is not included in the URI set to the daemon during `subscribeBuddy` call.Presence is not working anymore since 20e8d7b3. It seems like URI scheme is not included in the URI set to the daemon during `subscribeBuddy` call.Hugo LefeuvreHugo Lefeuvrehttps://git.jami.net/savoirfairelinux/jami-libclient/-/issues/389Several issues in the new call model's state machine2018-09-20T14:07:01ZHugo LefeuvreSeveral issues in the new call model's state machineThe new call model's state machine suffers from multiple design issues:
* [x] State transitions are realized at multiple places. This makes handling of specific transitions in the state machine more complicated and leads to [terrific c...The new call model's state machine suffers from multiple design issues:
* [x] State transitions are realized at multiple places. This makes handling of specific transitions in the state machine more complicated and leads to [terrific code](https://git.ring.cx/savoirfairelinux/ring-lrc/blob/master/src/newcallmodel.cpp#L504).
* [x] `callStatusChanged` should never be emitted by `togglePause()`. Instead it should wait for feedback from the daemon.
* [x] `slotCallStateChanged` is handling conference state changes very badly. From the three possible conference states, only `HOLD` is handled properly. The rest is just considered to be an internal error....Next major releaseHugo LefeuvreHugo Lefeuvrehttps://git.jami.net/savoirfairelinux/jami-libclient/-/issues/388SIP: contact search/add bar filtering issues2018-09-12T15:21:28ZSIP: contact search/add bar filtering issuesI'm looking at using Ring as a SIP client and I seem to have been able to successfully install the 2018.6.6 version from the Gentoo overlay. However, I've been having a couple of problems with adding/searching contacts using the text inp...I'm looking at using Ring as a SIP client and I seem to have been able to successfully install the 2018.6.6 version from the Gentoo overlay. However, I've been having a couple of problems with adding/searching contacts using the text input at the top left of the interface:
* I can't seem to call any contacts with `*` in their numbers. This might not be an issue normally since normal phone numbers don't use that character, but my VoIP provider has voicemail set up as `*97` and there doesn't seem to be any way to call that number to check my voicemail using Ring. I even tried manually adding a conversation to the database using SQLite and still didn't see it in the list.
* I tried typing a `'` into the search box to see if that would let me use special characters like `*` and it crashed LRC with an SQL error. I suppose that there really aren't any phone numbers with `'` in them, but at the same time the fact that Ring uses SQL but doesn't seem to be properly escaping its queries is a major red flag for security-conscious users.Sébastien BlinSébastien Blinhttps://git.jami.net/savoirfairelinux/jami-libclient/-/issues/386Smartlist should not display INVALID items2018-09-11T19:29:29ZHugo LefeuvreSmartlist should not display INVALID itemsprofileInfo might have `type` field set to `INVALID`. In this case the smartlist should not display it.
This might allow user to create invalid conversations in some obscure circumstances.profileInfo might have `type` field set to `INVALID`. In this case the smartlist should not display it.
This might allow user to create invalid conversations in some obscure circumstances.Hugo LefeuvreHugo Lefeuvrehttps://git.jami.net/savoirfairelinux/jami-libclient/-/issues/385Exception chain during call termination2018-09-10T19:25:21ZHugo LefeuvreException chain during call terminationWhen a call terminates
1. `slotCallEnded()` (conversationmodel) is executed. Since false is passed to `getCallFromURI()` the call is not found and `std::out_of_range` is thrown. Consequently callId is set to `""`.
2. `selectConversation...When a call terminates
1. `slotCallEnded()` (conversationmodel) is executed. Since false is passed to `getCallFromURI()` the call is not found and `std::out_of_range` is thrown. Consequently callId is set to `""`.
2. `selectConversation()` is then executed. Since callId has been set to `""`, the newcallmodel fails to find the call and `std::out_of_range` is thrown. What happens is the same as without exception, namely `showChatView` signal is emitted.
There might be other exceptions thrown under the hood. I understand that the newcallmodel is designed to set the callId to `""` when the call finished, but this has to be done without exceptions.Hugo LefeuvreHugo Lefeuvrehttps://git.jami.net/savoirfairelinux/jami-libclient/-/issues/384Bad handling of URIs in smartlist2018-09-11T21:31:36ZHugo LefeuvreBad handling of URIs in smartlist**Affects**: latest LRC master
Any URI beginning with `ring:` is recognized as a valid RingID by the LRC. Some URIs beginning with `sip:` and followed by letters like `sip:pol` are recognized as valid RingID. This is a big bug.**Affects**: latest LRC master
Any URI beginning with `ring:` is recognized as a valid RingID by the LRC. Some URIs beginning with `sip:` and followed by letters like `sip:pol` are recognized as valid RingID. This is a big bug.Next major releaseHugo LefeuvreHugo Lefeuvrehttps://git.jami.net/savoirfairelinux/jami-libclient/-/issues/382Better handling of paused calls2022-01-07T21:30:58ZHugo LefeuvreBetter handling of paused calls**Currently**: User A and B are in a call. User A pauses the call. User A's screen becomes black while user B's screen freezes (it displays the last received frame).
This is ugly. We should be able to better represent a paused call on b...**Currently**: User A and B are in a call. User A pauses the call. User A's screen becomes black while user B's screen freezes (it displays the last received frame).
This is ugly. We should be able to better represent a paused call on both sides. All needed info is already provided by the daemon.Hugo LefeuvreHugo Lefeuvrehttps://git.jami.net/savoirfairelinux/jami-libclient/-/issues/381Merging two conferences is not possible / glitched2018-08-28T19:48:59ZHugo LefeuvreMerging two conferences is not possible / glitched```
void
NewCallModel::joinCalls(const std::string& callIdA, const std::string& callIdB) const
{
if (!hasCall(callIdA) || !hasCall(callIdB)) return;
auto& call1 = pimpl_->calls[callIdA];
auto& call2 = pimpl_->calls[callIdB];...```
void
NewCallModel::joinCalls(const std::string& callIdA, const std::string& callIdB) const
{
if (!hasCall(callIdA) || !hasCall(callIdB)) return;
auto& call1 = pimpl_->calls[callIdA];
auto& call2 = pimpl_->calls[callIdB];
if (call1->type == call::Type::CONFERENCE)
CallManager::instance().addParticipant(callIdB.c_str(), callIdA.c_str());
else if (call2->type == call::Type::CONFERENCE)
CallManager::instance().addParticipant(callIdA.c_str(), callIdB.c_str());
else if (call1->type == call::Type::CONFERENCE && call2->type == call::Type::CONFERENCE)
CallManager::instance().joinConference(callIdA.c_str(), callIdB.c_str());
else
CallManager::instance().joinParticipant(callIdA.c_str(), callIdB.c_str());
}
```
The third else if is never executed and should appear first in the if. This is a bug.Hugo LefeuvreHugo Lefeuvrehttps://git.jami.net/savoirfairelinux/jami-libclient/-/issues/383regex_error crash when entering "*" in search box2018-08-30T20:05:51ZEric Drechselregex_error crash when entering "*" in search boxI am trying to enter "\*97" to access voicemail on voip.ms. Entering "\*" in the search box triggers a crash. Reproduced with latest arch linux ring-gnome package as well as latest head via ring-gnome-git AUR package.
> terminate calle...I am trying to enter "\*97" to access voicemail on voip.ms. Entering "\*" in the search box triggers a crash. Reproduced with latest arch linux ring-gnome package as well as latest head via ring-gnome-git AUR package.
> terminate called after throwing an instance of 'std::regex_error'
> what(): regex_error
> /usr/bin/ring.cx: line 46: 12705 Aborted (core dumped) gnome-ring $*
Is this due to some library version in Arch, or is this reproducible elsewhere?Hugo LefeuvreHugo Lefeuvrehttps://git.jami.net/savoirfairelinux/jami-libclient/-/issues/380Useless call status in new call model2018-08-28T15:47:57ZHugo LefeuvreUseless call status in new call modelThe new call model contains some call status which appear to be useless, such as `call::Status::AUTO_ANSWERING`. We should probably get rid of them.The new call model contains some call status which appear to be useless, such as `call::Status::AUTO_ANSWERING`. We should probably get rid of them.Hugo LefeuvreHugo Lefeuvre