30static constexpr const char MIME_TYPE_GIT[] {
"application/im-gitmessage-id"};
37 std::map<std::string, ConvInfo>
c;
38 std::map<std::string, ConversationRequest>
cr;
41 std::map<std::string, std::map<std::string, std::string>>
p;
43 std::map<std::string, std::map<std::string, std::string>>
ld;
55 std::map<std::string, std::map<std::string, std::map<std::string, std::string>>>
ms;
60using ChannelCb = std::function<
bool(
const std::shared_ptr<dhtnet::ChannelSocket>&)>;
71 std::shared_ptr<AccountManager> accountManager,
92 void onBootstrapStatus(
const std::function<
void(std::string, Conversation::BootstrapStatus)>&
cb);
146 const std::string& conversationId,
147 const std::vector<uint8_t>& payload,
193 const std::string& uri,
206 void sendMessage(
const std::string& conversationId,
208 const std::string&
replyTo =
"",
209 bool announce =
true,
213 void sendMessage(
const std::string& conversationId,
215 const std::string&
replyTo =
"",
216 const std::string& type =
"text/plain",
217 bool announce =
true,
234 const std::string& conversationId,
235 const std::string& interactionId);
236 std::map<std::string, std::map<std::string, std::map<std::string, std::string>>>
convMessageStatus()
const;
253 void clearCache(
const std::string& conversationId);
261 std::shared_ptr<TransferManager>
dataTransfer(
const std::string&
id)
const;
271 const std::string&
member,
272 const std::string& fileId,
283 const std::string& interactionId,
284 const std::string& fileId,
285 const std::string& path);
299 void onSyncData(
const SyncMsg&
msg,
const std::string& peerId,
const std::string& deviceId);
316 void setFetched(
const std::string& conversationId,
const std::string& deviceId,
const std::string& commit);
326 const std::string& deviceId,
327 const std::string& conversationId,
339 bool sendRequest =
true);
365 const std::string&
toId,
366 const std::string&
fromId,
367 const std::string& authorUri)
const;
386 const std::map<std::string, std::string>& infos,
388 std::map<std::string, std::string>
conversationInfos(
const std::string& conversationId)
const;
400 std::map<std::string, std::map<std::string, std::string>>
convPreferences()
const;
409 bool isBanned(
const std::string&
convId,
const std::string& uri)
const;
433 const std::set<std::string>&
targetUris)
const;
440 bool isHosting(
const std::string& conversationId,
const std::string&
confId)
const;
446 std::vector<std::map<std::string, std::string>>
getActiveCalls(
const std::string& conversationId)
const;
454 std::shared_ptr<SIPCall>
call(
455 const std::string& url,
456 const std::vector<libjami::MediaMap>&
mediaList,
457 std::function<
void(
const std::string&,
const DeviceId&,
const std::shared_ptr<SIPCall>&)>&&
cb);
459 const std::string&
confId,
460 const std::string& callId,
461 const std::vector<libjami::MediaMap>&
mediaList = {});
464 static void saveConvInfos(
const std::string& accountId,
const std::map<std::string, ConvInfo>& conversations);
466 const std::map<std::string, ConvInfo>& conversations);
468 const std::map<std::string, ConversationRequest>& conversationsRequests);
470 const std::map<std::string, ConversationRequest>& conversationsRequests);
472 static std::map<std::string, ConvInfo>
convInfos(
const std::string& accountId);
473 static std::map<std::string, ConvInfo>
convInfosFromPath(
const std::filesystem::path& path);
474 static std::map<std::string, ConversationRequest>
convRequests(
const std::string& accountId);
475 static std::map<std::string, ConversationRequest>
convRequestsFromPath(
const std::filesystem::path& path);
489 std::shared_ptr<dhtnet::ChannelSocket>
gitSocket(std::string_view deviceId, std::string_view
convId)
const;
493 const std::shared_ptr<dhtnet::ChannelSocket>& channel);
503 void addSwarmChannel(
const std::string& conversationId, std::shared_ptr<dhtnet::ChannelSocket> socket);
518 std::shared_ptr<Impl> pimpl_;
void removeContact(const std::string &uri, bool ban)
Remove one to one conversations related to a contact.
void addSwarmChannel(const std::string &conversationId, std::shared_ptr< dhtnet::ChannelSocket > socket)
Add a swarm connection.
void onConversationRequest(const std::string &from, const Json::Value &value)
Called when receiving a new conversation's request.
bool onMessageDisplayed(const std::string &peer, const std::string &conversationId, const std::string &interactionId)
void editMessage(const std::string &conversationId, const std::string &newBody, const std::string &editedId)
static void saveConvInfosToPath(const std::filesystem::path &path, const std::map< std::string, ConvInfo > &conversations)
static void saveConvInfos(const std::string &accountId, const std::map< std::string, ConvInfo > &conversations)
void search(uint32_t req, const std::string &convId, const Filter &filter) const
Search in conversations via a filter.
std::vector< std::map< std::string, std::string > > getConversationRequests() const
Return conversation's requests.
void syncConversations(const std::string &peer, const std::string &deviceId)
Sync conversations with detected peer.
std::shared_ptr< Conversation > getConversation(const std::string &convId)
Get a conversation.
void removeGitSocket(std::string_view deviceId, std::string_view convId)
void connectivityChanged()
Triggers a bucket maintainance for DRTs.
void setAccountManager(std::shared_ptr< AccountManager > accountManager)
void addConversationMember(const std::string &conversationId, const dht::InfoHash &contactUri, bool sendRequest=true)
Adds a new member to a conversation (this will triggers a member event + new message on success)
bool onFileChannelRequest(const std::string &conversationId, const std::string &member, const std::string &fileId, bool verifyShaSum=true) const
Choose if we can accept channel request.
void clearPendingFetch()
Clear not removed fetch.
void reloadRequests()
Reload requests from file.
void onNeedConversationRequest(const std::string &from, const std::string &conversationId)
Called when a peer needs an invite for a conversation (generally after that they received a commit no...
static void saveConvRequestsToPath(const std::filesystem::path &path, const std::map< std::string, ConversationRequest > &conversationsRequests)
bool needsSyncingWith(const std::string &memberUri) const
Check if we need to share infos with a contact.
std::map< std::string, std::map< std::string, std::string > > convPreferences() const
Retrieve all conversation preferences to sync with other devices.
std::vector< std::string > getConversations() const
Return all conversation's id (including syncing ones)
static void saveConvRequests(const std::string &accountId, const std::map< std::string, ConversationRequest > &conversationsRequests)
void setConversationPreferences(const std::string &conversationId, const std::map< std::string, std::string > &prefs)
Update user's preferences (like color, notifications, etc) to be synced across devices.
std::map< std::string, std::string > getConversationPreferences(const std::string &conversationId, bool includeCreated=false) const
static std::map< std::string, ConversationRequest > convRequests(const std::string &accountId)
std::map< std::string, std::string > conversationInfos(const std::string &conversationId) const
void acceptConversationRequest(const std::string &conversationId, const std::string &deviceId="")
Accept a conversation's request.
std::shared_ptr< SIPCall > call(const std::string &url, const std::vector< libjami::MediaMap > &mediaList, std::function< void(const std::string &, const DeviceId &, const std::shared_ptr< SIPCall > &)> &&cb)
Call the conversation.
bool updateConvForContact(const std::string &uri, const std::string &oldConv, const std::string &newConv)
Replace linked conversation in contact's details.
std::string getOneToOneConversation(const std::string &uri) const noexcept
Get related conversation with member.
void shutdownConnections()
Clear all connection (swarm channels)
std::string findMatchingOneToOneConversation(const std::string &excludedConversationId, const std::set< std::string > &targetUris) const
Search for an existing one-to-one conversation that exactly matches the given set of member URIs.
void bootstrap(const std::string &convId="")
Bootstrap swarm managers to other peers.
std::string startConversation(ConversationMode mode=ConversationMode::INVITES_ONLY, const dht::InfoHash &otherMember={})
Starts a new conversation.
void fetchNewCommits(const std::string &peer, const std::string &deviceId, const std::string &conversationId, const std::string &commitId)
Launch fetch on new commit.
void setFetched(const std::string &conversationId, const std::string &deviceId, const std::string &commit)
Notify that a peer fetched a commit.
void sendMessage(const std::string &conversationId, Json::Value &&value, const std::string &replyTo="", bool announce=true, OnCommitCb &&onCommit={}, OnDoneCb &&cb={})
bool isHosting(const std::string &conversationId, const std::string &confId) const
Check if we're hosting a specific conference.
uint32_t loadConversation(const std::string &conversationId, const std::string &fromMessage="", size_t n=0)
Load conversation's messages.
void removeConversationMember(const std::string &conversationId, const dht::InfoHash &contactUri, bool isDevice=false)
Remove a member from a conversation (this will trigger a member event + new message on success)
uint32_t countInteractions(const std::string &convId, const std::string &toId, const std::string &fromId, const std::string &authorUri) const
Retrieve the number of interactions from interactionId to HEAD.
static std::map< std::string, ConversationRequest > convRequestsFromPath(const std::filesystem::path &path)
bool downloadFile(const std::string &conversationId, const std::string &interactionId, const std::string &fileId, const std::string &path)
Ask conversation's members to send a file to this device.
std::vector< uint8_t > conversationVCard(const std::string &conversationId) const
static std::map< std::string, ConvInfo > convInfos(const std::string &accountId)
void addCallHistoryMessage(const std::string &uri, uint64_t duration_ms, const std::string &reason)
Add to the related conversation the call history message.
void addGitSocket(std::string_view deviceId, std::string_view convId, const std::shared_ptr< dhtnet::ChannelSocket > &channel)
void clearCache(const std::string &conversationId)
Clear loaded interactions.
~ConversationModule()=default
void reactToMessage(const std::string &conversationId, const std::string &newBody, const std::string &reactToId)
std::vector< std::map< std::string, std::string > > getConversationMembers(const std::string &conversationId, bool includeBanned=false) const
Get members.
std::shared_ptr< dhtnet::ChannelSocket > gitSocket(std::string_view deviceId, std::string_view convId) const
Return current git socket used for a conversation.
void hostConference(const std::string &conversationId, const std::string &confId, const std::string &callId, const std::vector< libjami::MediaMap > &mediaList={})
uint32_t loadSwarmUntil(const std::string &conversationId, const std::string &fromMessage, const std::string &toMessage)
void onSyncData(const SyncMsg &msg, const std::string &peerId, const std::string &deviceId)
Detect new conversations and request from other devices.
void loadConversations()
Refresh information about conversations.
void addConvInfo(const ConvInfo &info)
static std::map< std::string, ConvInfo > convInfosFromPath(const std::filesystem::path &path)
void loadSingleConversation(const std::string &convId)
bool isBanned(const std::string &convId, const std::string &uri) const
Return if a device or member is banned from a conversation.
std::vector< std::map< std::string, std::string > > getActiveCalls(const std::string &conversationId) const
Return active calls.
void updateConversationInfos(const std::string &conversationId, const std::map< std::string, std::string > &infos, bool sync=true)
Update metadatas from conversations (like title, avatar, etc)
std::shared_ptr< Typers > getTypers(const std::string &convId)
Get Typers object for a conversation.
void cloneConversationFrom(const std::string &conversationId, const std::string &uri, const std::string &oldConvId="")
Clone conversation from a member.
std::string peerFromConversationRequest(const std::string &convId) const
Retrieve author of a conversation request.
void declineConversationRequest(const std::string &conversationId)
Decline a conversation's request.
void onTrustRequest(const std::string &uri, const std::string &conversationId, const std::vector< uint8_t > &payload, time_t received)
Called when detecting a new trust request with linked one to one.
std::shared_ptr< TransferManager > dataTransfer(const std::string &id) const
Returns related transfer manager.
bool removeConversation(const std::string &conversationId)
Remove a conversation, but not the contact.
std::map< std::string, std::map< std::string, std::map< std::string, std::string > > > convMessageStatus() const
static constexpr const char MIME_TYPE_INVITE[]
std::function< void(const std::string &, const std::string &, ChannelCb &&, const std::string &)> NeedSocketCb
static constexpr const char MIME_TYPE_GIT[]
void emitSignal(Args... args)
std::function< void(bool, const std::string &)> OnDoneCb
std::function< void(const std::string &, const std::string &)> OneToOneRecvCb
std::function< bool(const std::shared_ptr< dhtnet::ChannelSocket > &)> ChannelCb
std::function< void(const std::string &)> OnCommitCb
std::function< void(std::shared_ptr< SyncMsg > &&)> NeedsSyncingCb
std::function< uint64_t(const std::string &, const DeviceId &, std::map< std::string, std::string >, uint64_t)> SengMsgCb
std::map< std::string, std::map< std::string, std::string > > p
std::map< std::string, std::map< std::string, std::string > > ld
std::map< std::string, std::map< std::string, std::map< std::string, std::string > > > ms
std::map< std::string, ConversationRequest > cr
std::map< std::string, ConvInfo > c