This approach allows client apps that install ringtones (and any other resources) in custom locations to specify that directory at runtime. This will take precedence over the build time data directory supplied for platforms which install to a fixed path.
https: //git.jami.net/savoirfairelinux/jami-client-qt/-/issues/1619
Change-Id: I81616f79196e645a5ad677d6956be6a2ffcd976a
The goal of this patch is to allow the clients to get a better
sent/read status from the daemon.
API doesn't change much, but internal logic got some changes. For the
client:
+ SwarmMessage now contains a map<string,int> status where string is the
uri of a member, int is the status (0 = sending, 1 = sent, 2 = read)
+ cancelMessage is removed as not used anymore (sendMessage with flag=1
will edit a message)
+ getMessageStatus is removed as the status is sent in the SwarmMessage
+ accountMessageStatusChanged is now emitted for swarm messages when a
fetch or setDisplay occurs. Client must handle this signal correctly.
+ Previous code to manage last displayed, fetched status is now merged
with message status
+ Sync info is done when the sync is opened, else status are not updated
correctly
GitLab: #948
Change-Id: I60763d4de8a995c6fc9f6df6434e266211f8dc2f
This heavily changes the API for the client. The goal here is
to move the logic to construct the history to show in the daemon
and not the client. This has several advantages:
1. Logic is common across every platforms, so bugs should not be
platform-specific
2. Client got less logic
3. Signal are simplified, if an edition comes, "MessageUpdated"
will be triggered instead MessageReceived.
4. Some tests are added for linearizing the history.
5. Search on edition is fixed.
Tests got heavily re-written, but the content didn't change (2 tests
are added, the rest is simplification).
GitLab: #831
Change-Id: Ie7c81077067e9e49db1dd396829c9225c0512c16
This patch introduces the ability to start calls and extends the
usage of rendezvous points to swarm with multiple participants.
When starting a call in a swarm with multiple participats, one device
will work as the host of the conference, and the caller will
immediately start the call alone.
Other peers will receive a commit and a notification to be able
to join the active call. To join a call, users needs to call
rdv:uri/device/convId/confId to be added (if authorized) to the conf.
There are some majors differences in the process.
First, every conversation will be able to decide a default host
for conferences. This still needs some design and will be
introduced in another patch. For now, the caller is the host.
Then, because all members of the call may not be interested to join
a call, or they may want to get several calls at the same time, the
system must be able to manage more than one active calls (e.g. a
company with multiple projects can do several standups at the same
time).
Finally, in the conversation, two commits will be generated to be
able to know what active calls are available. The first is
announcing that a conference started, the second announces that
the conference stopped (the host closed the call).
However, this introduces a difficulty. The host may crash and not
commit the end of the call in time. In this case, hostedCalls are
stored in a file and the conversation is updated during the init
of the daemon.
Change-Id: I081a4920edb3773bbed884ae50f34e476ad42094
Documentation: https://docs.jami.net/technical/swarm.html#call-in-swarm
GitLab: #312
It's not possible to replace the DRing namespace for jami because of conflicts
with namespaces and classes defined under the jami namespace. Thus, use libjami
as the namespace.
Script to reproduce:
rg -l DRing | sort | uniq | awk '$0 !~ /NEWS/' | xargs sed -i -e 's|DRing|libjami|g'
rg -l DRING_ | sort | uniq | xargs sed -i -e 's|DRING_|LIBJAMI_|g'
sed -i -e 's|dring|jami|g' src/jami/CMakeLists.txt
sed -i -e 's|dring|jami|g' src/jami/def.h
Change-Id: I80e8c8b58a7586527a016bbef850bab07869c473
This store user's preferences per conversation into
conversation_data/<convId>/preferences
In this way, the daemon is able to sync this file across devices
and remove preferences at the same time we remove the conversation.
For now, only support "color" and "ignoreNotifications"
The preferences are synced via partial SyncMsg sent across devices.
Change-Id: I8fe74cc06733ad61d45d721e0264b1941d4cf122
* rename EchoCanceller to AudioProcessor
* enable echo cancellation and voice activity detection
* add minimum active duration and trigger time to voice activation
Gitlab: #741
Change-Id: I98662462c17539fca1d042482e97fdb3eff86130
+ Bump deamon version to enable multistream
+ use signal for recorder to check if file stopped
+ answerMediaChangeRequest pass isRemote for tests
Change-Id: I396b8246264cb7826350f75e74f20f05b864f384
The current design got some limitations. It's not possible to
control informations per shared media. This means that we can't
got several active sinks for example.
The goal of this patch here is to update the conferences orders
to be able to control the state of each sink individually and for
the client to be able to handle conferences with accounts connected
via several devices with several medias per devices.
So each orders is sent with a different level (account/device/media)
For example, we will be able to send a moderator order for an account,
to hangup a device or to set a media active.
To support those orders, both sides MUST be patched. Else, the old
protocol will be used. The version of the protocol supported is sent
in the conferences informations to notify the peer what version to use.
Finally, this patch changes some APIs to support multisteam:
+ Some APIs now takes the deviceId or the sinkId when necessary
https://git.jami.net/savoirfairelinux/jami-project/-/issues/1429
Doc: https://git.jami.net/savoirfairelinux/jami-project/-/wikis/technical/6.1.-Conference-Protocol
Change-Id: Ieedd6055fd43b2a09b2cc8b253dcd6a3bf260a39
When muting/un-muting the video, a re-invite is performed
leading to a full media renegotiation and restart, including
ICE session if used.
With these changes, the mute/unmute video will still require
a re-invite (a new SDP to indicate the new media directions), but
the ICE session is re-used and only the video is stopped/started
accordingly.
The behavior improves the UX by avoiding unnecessary audio disruptions
and is more compliant with SIP/ICE specs (see RFC-5245 section 9.1.1.1
for example)
Gitlab: #671
Change-Id: I13caf9a965af1d76e922fe5f6b86d5332b3296d6
This starts the work to move calls and conference per account,
cleaning up the API and start future re-factorization.
Change-Id: I2a3a2c77e9ba78b1a280bdf8dca7eeaabb72f3fd
As libwrap is used by default, HAVE_SHM should only be true
if directrenderer is not used to avoid useless work
Change-Id: I9f819a7c06c667ccf08066f70104dcd3667f8546
Automated using the following commands:
$ mv src/{dring,jami}
$ git grep -l src/dring | xargs sed -i 's,src/dring,src/jami,g'
$ git grep -l '#include "dring/' | \
xargs sed -i 's,#include "dring/,#include "jami/,g'
$ git grep -l 'dring.h' | xargs sed -i 's,dring.h,jami.h,g'
And finally,
$ git grep -l 'dring' | xargs sed -i 's,dring,jami,g'
$ files=$(find -name '*dring*' | sort)
$ for f in $files; do mkdir -p "$(dirname "$f")"; \
mv "$f" "$(echo $f | sed 's/dring/jami/g')"; done
To resolve a bad renaming favorably:
$ git grep -l -i AlsaCarjami | \
xargs sed -i -E 's/([Aa])lsaCarjami/\1lsaCardRingtone/g'
The above renaming command is not perfect, so some hand-tuning was
required to complete it.
* src/manager.cpp (Manager::ManagerPimpl::retrieveConfigPath):
Preserve the dring.yml configuration file name, until we add something
to migrate (rename) it to jami.yml.
* man/dring.pod: Delete.
* bin/dbus/jamid.pod: Move to ...
* man/jamid.pod: here.
* bin/dbus/meson.build (jamid_targets): Normalize man section to the
pre-existing 1 and adjust accordingly.
* src/jami/def.h (dring_EXPORTS): Rename to ...
(jami_EXPORTS): ... this.
change-Id: I9828be6da9c711ab2f22c4d1b9539fea89d7b6fb
The sources previously hard-coded the location of the default Jami
ringtone as "/usr/share/ring/ringtones/default.opus". It should
instead be computed from the already existing PROGSHAREDIR macro,
which is built from Autoconf's configurable datadir.
* globals.mk (-DPROGSHAREDIR): Rename the 'ring' subdirectory to
'jami'.
* meson.build (conf): Likewise.
* ringtones/Makefile.am (dist_jamiringtones_DATA): s/ring/jami/g
* ringtones/meson.build: Likewise.
* src/account.cpp (DEFAULT_RINGTONE_PATH): Define in terms of
PROGSHAREDIR.
* bin/dbus/Makefile.am (libclient_dbus_la_CXXFLAGS): Remove extraneous
flags, already propagated via AM_CPPFLAGS. Honor AM_CXXFLAGS.
* src/client/Makefile.am (libclient_la_CXXFLAGS): Remove.
* src/plugin/Makefile.am (libplugin_la_CXXFLAGS): Likewise.
Change-Id: Icaa0a92e896f86b0bb07f82e4079570db08fafbd
add API to ask for a failed transfer. This can be used when the
client detects a transfer they doesn't have yet. It will ask all
members of the conversation to send the transfer back.
GitLab: #136
Change-Id: I1484298c4fa0eabb614132e22d8032612e14b949
Check peer's Daemon version and ignore media change request
action from the client if the the peer does not support the
feature.
Also bump Daemon version to 10.0.2
Gitlab: #551
Change-Id: Ifd105d2fe2706b4667f5bafabcb3d91e771e7299
Detecting that a socket is down via a keep alive can take time, moreover
if a relay is used, because the keep alive can continue to work even if the
connection is half closed.
In this patch, we add a mechanism where a beacon is sent over the multiplexed
socket to know if the peer can answer. This message can be used to detect
if a socket is usable and is sent whenever the user starts a call or that
a connectivityChanged() occurs.
Moreover, the multiplexedsocket can now sends a version to enable features
and if a bad packet on the control socket comes, the socket is not stopped.
GitLab: #542
Change-Id: Ia66d8d7f9b66bba02927f4ea41c21ef27089bceb