43namespace ConversationMapKeys {
44static constexpr const char*
ID =
"id";
45static constexpr const char*
CREATED =
"created";
46static constexpr const char*
REMOVED =
"removed";
47static constexpr const char*
ERASED =
"erased";
48static constexpr const char*
MEMBERS =
"members";
53static constexpr const char*
CACHED =
"cached";
54static constexpr const char*
RECEIVED =
"received";
55static constexpr const char*
DECLINED =
"declined";
56static constexpr const char*
FROM =
"from";
58static constexpr const char*
METADATAS =
"metadatas";
61namespace ConversationPreferences {
83 Json::Value
toJson()
const;
84 std::map<std::string, std::string>
toMap()
const;
90 return m.size() ==
om.size() && std::equal(
m.begin(),
m.end(),
om.begin());
116 explicit ConvInfo(
const Json::Value& json);
123 Json::Value
toJson()
const;
135 = std::function<
void(std::vector<std::map<std::string, std::string>>&&
messages)>;
137 = std::function<
void(std::vector<libjami::SwarmMessage>&&
messages)>;
143using GitSocketList = std::map<DeviceId, std::shared_ptr<dhtnet::ChannelSocket>>;
144using ChannelCb = std::function<
bool(
const std::shared_ptr<dhtnet::ChannelSocket>&)>;
146 = std::function<
void(
const std::string&,
const std::string&,
ChannelCb&&,
const std::string&)>;
155 const std::string& conversationId =
"");
158 const std::string& conversationId);
206 std::string
id()
const;
238 std::string_view
filter = {},
259 std::string
uriFromDevice(
const std::string& deviceId)
const;
273 bool isBanned(
const std::string& uri)
const;
277 const std::string& type =
"text/plain",
278 const std::string&
replyTo =
"",
282 const std::string&
replyTo =
"",
308 std::optional<std::map<std::string, std::string>>
getCommit(
const std::string&
commitId)
const;
331 const std::string& deviceId,
395 std::map<std::string, std::string>
infos()
const;
402 std::vector<uint8_t>
vCard()
const;
419 const std::string& fileId,
420 std::filesystem::path& path,
421 std::string& sha3sum)
const;
432 const std::string& fileId,
433 const std::string& path,
434 const std::string&
member =
"",
435 const std::string& deviceId =
"");
467 std::map<std::string, std::map<std::string, std::string>>
messageStatus()
const;
480 void onMessageStatusChanged(
const std::function<
void(
const std::map<std::string, std::map<std::string, std::string>>&)>&
cb);
489 const std::string&
fromId =
"",
490 const std::string& authorUri =
"")
const;
500 const std::shared_ptr<std::atomic_int>&
flag)
const;
527 std::vector<std::map<std::string, std::string>>
currentCalls()
const;
534 std::shared_ptr<dhtnet::ChannelSocket>
gitSocket(
const DeviceId& deviceId)
const;
535 void addGitSocket(
const DeviceId& deviceId,
const std::shared_ptr<dhtnet::ChannelSocket>& socket);
563 std::shared_ptr<Typers>
typers()
const;
566 std::shared_ptr<Conversation> shared()
570 std::shared_ptr<Conversation const> shared()
const
574 std::weak_ptr<Conversation> weak()
578 std::weak_ptr<Conversation const> weak()
const
589 void checkBootstrapMember(
const asio::error_code&
ec,
590 std::vector<std::map<std::string, std::string>> members);
593 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.
void loadMessages2(const OnLoadMessages2 &cb, const LogOptions &options)
Get a range of messages.
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< 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)
void bootstrap(std::function< void()> onBootstraped, const std::vector< DeviceId > &knownDevices)
Bootstrap swarm manager to other peers.
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 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 loadMessages(OnLoadMessages cb, const LogOptions &options)
Get a range of messages.
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.
void sendMessages(std::vector< Json::Value > &&messages, OnMultiDoneCb &&cb={})
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)
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 sendMessage(std::string &&message, const std::string &type="text/plain", const std::string &replyTo="", OnCommitCb &&onCommit={}, OnDoneCb &&cb={})
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.
bool isBootstraped() const
Check if we're at least connected to one node.
std::string lastCommitId() const
Get last commit id.
bool isBanned(const std::string &uri) const
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.
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.
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 const char * CACHED
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 * HOSTED_CALLS
static constexpr const char * PREFERENCES
static constexpr const char * ACTIVE_CALLS
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
std::function< void(std::vector< libjami::SwarmMessage > &&messages)> OnLoadMessages2
std::function< void(const std::vector< std::string > &)> OnMultiDoneCb
void emitSignal(Args... args)
std::function< void(bool, const std::string &)> OnDoneCb
std::function< void(std::vector< std::map< std::string, std::string > > &&messages)> OnLoadMessages
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
std::string conversationId
std::map< std::string, std::string > toMap() const
bool operator==(const ConversationRequest &o) const