45namespace ConversationMapKeys {
46static constexpr const char*
ID {
"id"};
47static constexpr const char*
CREATED {
"created"};
48static constexpr const char*
REMOVED {
"removed"};
49static constexpr const char*
ERASED {
"erased"};
50static constexpr const char*
MEMBERS {
"members"};
52static constexpr const char*
RECEIVED {
"received"};
53static constexpr const char*
DECLINED {
"declined"};
54static constexpr const char*
FROM {
"from"};
56static constexpr const char*
METADATAS {
"metadatas"};
59namespace ConversationDirectories {
61static constexpr std::string_view
STATUS {
"status"};
62static constexpr std::string_view
SENDING {
"sending"};
63static constexpr std::string_view
FETCHED {
"fetched"};
66static constexpr std::string_view
CACHED {
"cached"};
69namespace ConversationPreferences {
96 Json::Value
toJson()
const;
97 std::map<std::string, std::string>
toMap()
const;
103 return m.size() ==
om.size() && std::equal(
m.begin(),
m.end(),
om.begin());
142 explicit ConvInfo(
const Json::Value& json);
149 Json::Value
toJson()
const;
160using GitSocketList = std::map<DeviceId, std::shared_ptr<dhtnet::ChannelSocket>>;
161using ChannelCb = std::function<
bool(
const std::shared_ptr<dhtnet::ChannelSocket>&)>;
170 Conversation(
const std::shared_ptr<JamiAccount>&
account,
const std::string& conversationId =
"");
173 const std::string& conversationId);
189 void announce(
const std::vector<std::map<std::string, std::string>>&
commits,
bool commitFromSelf =
false);
232 std::string
id()
const;
286 std::string
uriFromDevice(
const std::string& deviceId)
const;
300 bool isBanned(
const std::string& uri)
const;
304 const std::string&
replyTo =
"",
328 std::optional<std::map<std::string, std::string>>
getCommit(
const std::string&
commitId)
const;
412 std::map<std::string, std::string>
infos()
const;
419 std::vector<uint8_t>
vCard()
const;
436 const std::string& fileId,
437 std::filesystem::path& path,
438 std::string& sha3sum)
const;
449 const std::string& fileId,
450 const std::string& path,
451 const std::string&
member =
"",
452 const std::string& deviceId =
"");
484 std::map<std::string, std::map<std::string, std::string>>
messageStatus()
const;
498 const std::function<
void(
const std::map<std::string, std::map<std::string, std::string>>&)>&
cb);
507 const std::string&
fromId =
"",
508 const std::string& authorUri =
"")
const;
543 std::vector<std::map<std::string, std::string>>
currentCalls()
const;
550 std::shared_ptr<dhtnet::ChannelSocket>
gitSocket(
const DeviceId& deviceId)
const;
551 void addGitSocket(
const DeviceId& deviceId,
const std::shared_ptr<dhtnet::ChannelSocket>& socket);
579 std::shared_ptr<Typers>
typers()
const;
585 std::vector<std::map<std::string, std::string>>
getConnectivity()
const;
588 std::shared_ptr<Conversation> shared() {
return std::static_pointer_cast<Conversation>(
shared_from_this()); }
589 std::shared_ptr<Conversation const> shared()
const
593 std::weak_ptr<Conversation> weak() {
return std::static_pointer_cast<Conversation>(
shared_from_this()); }
594 std::weak_ptr<Conversation const> weak()
const
601 std::unique_ptr<Impl> pimpl_;
This class gives access to the git repository that represents the conversation.
bool pull(const std::string &deviceId, OnPullCb &&cb, std::string commitId="")
Fetch and merge from peer.
std::set< std::string > memberUris(std::string_view filter={}, const std::set< MemberRole > &filteredRoles={MemberRole::INVITED, MemberRole::LEFT, MemberRole::BANNED}) const
std::shared_ptr< Typers > typers() const
Get Typers object.
bool downloadFile(const std::string &interactionId, const std::string &fileId, const std::string &path, const std::string &member="", const std::string &deviceId="")
Adds a file to the waiting list and ask members.
void addGitSocket(const DeviceId &deviceId, const std::shared_ptr< dhtnet::ChannelSocket > &socket)
std::string leave()
Leave a conversation.
std::string id() const
Get conversation's id.
void clearCache()
Clear all cached messages.
std::vector< std::string > commitsEndedCalls()
Refresh active calls.
std::map< std::string, std::map< std::string, std::string > > messageStatus() const
Retrieve last displayed and fetch status per member.
bool isMember(const std::string &uri, bool includeInvited=false) const
Test if an URI is a member.
void search(uint32_t req, const Filter &filter, const std::shared_ptr< std::atomic_int > &flag) const
Search in the conversation via a filter.
std::vector< std::map< std::string, std::string > > getConnectivity() const
Get connectivity information for the conversation.
std::vector< uint8_t > vCard() const
std::vector< std::string > getInitialMembers() const
One to one util, get initial members.
void connectivityChanged()
If we change from one network to one another, we will need to update the state of the connections.
std::shared_ptr< TransferManager > dataTransfer() const
Access to transfer manager.
void removeGitSocket(const DeviceId &deviceId)
std::vector< std::map< std::string, std::string > > currentCalls() const
Return current detected calls.
void clearFetched()
Reset fetched information.
void onMembersChanged(OnMembersChanged &&cb)
std::map< std::string, std::string > infos() const
Retrieve current infos (title, description, avatar, mode)
void monitor()
Print the state of the DRT linked to the conversation.
std::vector< NodeId > peersToSyncWith() const
Get peers to sync with.
void sendMessage(Json::Value &&message, const std::string &replyTo="", OnCommitCb &&onCommit={}, OnDoneCb &&cb={})
void bootstrap(std::function< void()> onBootstrapped, const std::vector< DeviceId > &knownDevices={})
Bootstrap swarm manager to other peers.
void removeActiveConference(Json::Value &&message, OnDoneCb &&cb={})
Announce the end of a call.
bool isInitialMember(const std::string &uri) const
ConversationMode mode() const
Get conversation's mode.
std::string join()
Join a conversation.
void addSwarmChannel(std::shared_ptr< dhtnet::ChannelSocket > channel)
Add swarm connection to the DRT.
std::vector< jami::DeviceId > getDeviceIdList() const
bool setMessageDisplayed(const std::string &uri, const std::string &interactionId)
Store last read commit (returned in getMembers)
void updateInfos(const std::map< std::string, std::string > &map, const OnDoneCb &cb={})
Change repository's infos.
void updateMessageStatus(const std::map< std::string, std::map< std::string, std::string > > &messageStatus)
Update fetch/read status.
void onMessageStatusChanged(const std::function< void(const std::map< std::string, std::map< std::string, std::string > > &)> &cb)
void shutdownConnections()
Stop SwarmManager, bootstrap and gitSockets.
void updatePreferences(const std::map< std::string, std::string > &map)
Change user's preferences.
std::vector< std::map< std::string, std::string > > getMembers(bool includeInvited=false, bool includeLeft=false, bool includeBanned=false) const
std::map< std::string, std::string > preferences(bool includeLastModified) const
Retrieve current preferences (color, notification, etc)
bool hasCommit(const std::string &commitId) const
Check if a commit exists in the repository.
void sync(const std::string &member, const std::string &deviceId, OnPullCb &&cb, std::string commitId="")
Fetch new commits and re-ask for waiting files.
std::shared_ptr< dhtnet::ChannelSocket > gitSocket(const DeviceId &deviceId) const
Git operations will need a ChannelSocket for cloning/fetching commits Because libgit2 is a C library,...
void onNeedSocket(NeedSocketCb cb)
Set the callback that will be called whenever a new socket will be needed.
std::string uriFromDevice(const std::string &deviceId) const
Retrieve the uri from a deviceId.
std::optional< std::map< std::string, std::string > > getCommit(const std::string &commitId) const
Retrieve one commit.
void erase()
Erase all related datas.
void setRemovingFlag()
Set a conversation as removing (when loading convInfo and still not sync)
void hasFetched(const std::string &deviceId, const std::string &commitId)
Store information about who fetch or not.
bool isHosting(const std::string &confId) const
Check if we're currently hosting this conference.
std::string lastCommitId() const
Get last commit id.
bool isBanned(const std::string &uri) const
void loadMessages(const OnLoadMessages &cb, const LogOptions &options)
Get a range of messages.
bool onFileChannelRequest(const std::string &member, const std::string &fileId, std::filesystem::path &path, std::string &sha3sum) const
Choose if we can accept channel request.
void addMember(const std::string &contactUri, const OnDoneCb &cb={})
Add conversation member.
bool hasSwarmChannel(const std::string &deviceId)
Used to avoid multiple connections, we just check if we got a swarm channel with a specific device.
void addKnownDevices(const std::vector< DeviceId > &devices, const std::string &memberUri)
Add known devices to the swarm manager.
bool isBootstrapped() const
Check if we're at least connected to one node.
bool isRemoving()
Check if we are removing the conversation.
void removeMember(const std::string &contactUri, bool isDevice, const OnDoneCb &cb={})
void hostConference(Json::Value &&message, OnDoneCb &&cb={})
Host a conference in the conversation.
std::vector< std::map< std::string, std::string > > getTrackedMembers() const
uint32_t countInteractions(const std::string &toId, const std::string &fromId="", const std::string &authorUri="") const
Retrieve how many interactions there is from HEAD to interactionId.
std::map< std::string, std::string > generateInvitation() const
Generate an invitation to send to new contacts.
Ring Account is build on top of SIPAccountBase and uses DHT to handle call connectivity.
static constexpr std::string_view SENDING
static constexpr std::string_view ACTIVE_CALLS
static constexpr std::string_view HOSTED_CALLS
static constexpr std::string_view PREFERENCES
static constexpr std::string_view CACHED
static constexpr std::string_view FETCHED
static constexpr std::string_view STATUS
static constexpr const char * CREATED
static constexpr const char * REMOVED
static constexpr const char * ID
static constexpr const char * RECEIVED
static constexpr const char * METADATAS
static constexpr const char * MEMBERS
static constexpr const char * DECLINED
static constexpr const char * ERASED
static constexpr const char * FROM
static constexpr const char * CONVERSATIONID
static constexpr const char * LAST_DISPLAYED
static constexpr const char * HOST_CONFERENCES
std::function< void(const std::string &, const std::string &, ChannelCb &&, const std::string &)> NeedSocketCb
void emitSignal(Args... args)
std::function< void(std::vector< libjami::SwarmMessage > &&messages)> OnLoadMessages
std::function< void(bool, const std::string &)> OnDoneCb
std::function< bool(const std::shared_ptr< dhtnet::ChannelSocket > &)> ChannelCb
std::function< void(bool fetchOk)> OnPullCb
std::map< DeviceId, std::shared_ptr< dhtnet::ChannelSocket > > GitSocketList
std::function< void(const std::string &)> OnCommitCb
std::function< void(const std::set< std::string > &)> OnMembersChanged
std::set< std::string > members
ConvInfo & operator=(const ConvInfo &)=default
ConvInfo & operator=(ConvInfo &&)=default
ConvInfo(const ConvInfo &)=default
std::string lastDisplayed
Json::Value toJson() const
ConvInfo(const std::string &id)
ConvInfo(ConvInfo &&)=default
A ConversationRequest is a request which corresponds to a trust request, but for conversations It's s...
ConversationRequest()=default
std::map< std::string, std::string > metadatas
Json::Value toJson() const
ConversationMode mode() const
std::string conversationId
std::map< std::string, std::string > toMap() const
bool operator==(const ConversationRequest &o) const