diff --git a/src/jamidht/conversation.cpp b/src/jamidht/conversation.cpp index 2b02d579c1a2dd2dcffdb371261d49c5fb0909fb..460165f5add02c0e2a07dda6173b3f5fac6837fc 100644 --- a/src/jamidht/conversation.cpp +++ b/src/jamidht/conversation.cpp @@ -176,7 +176,7 @@ public: accountId_ = shared->getAccountID(); transferManager_ = std::make_shared<TransferManager>(shared->getAccountID(), repository_->id()); - conversationDataPath_ = fileutils::get_data_dir() / shared->getAccountID() + conversationDataPath_ = fileutils::get_data_dir() / shared->getAccountID() / "conversation_data" / repository_->id(); fetchedPath_ = conversationDataPath_ / "fetched"; sendingPath_ = conversationDataPath_ / "sending"; diff --git a/src/jamidht/conversation_module.cpp b/src/jamidht/conversation_module.cpp index cf9b219af6d485eca4a63b545760dc1f9e688075..04d907e4c518fb3e8352eac45061848c2739c2bc 100644 --- a/src/jamidht/conversation_module.cpp +++ b/src/jamidht/conversation_module.cpp @@ -95,11 +95,11 @@ struct SyncedConversation pending.reset(); } - std::vector<std::map<std::string, std::string>> getMembers(bool includeBanned = false) const + std::vector<std::map<std::string, std::string>> getMembers(bool includeLeft, bool includeBanned) const { // conversation mtx must be locked if (conversation) - return conversation->getMembers(true, true, includeBanned); + return conversation->getMembers(true, includeLeft, includeBanned); // If we're cloning, we can return the initial members std::vector<std::map<std::string, std::string>> result; result.reserve(info.members.size()); @@ -830,7 +830,7 @@ ConversationModule::Impl::getConversationMembers(const std::string& conversation bool includeBanned) const { return withConv(conversationId, - [&](const auto& conv) { return conv.getMembers(includeBanned); }); + [&](const auto& conv) { return conv.getMembers(true, includeBanned); }); } void @@ -885,9 +885,13 @@ ConversationModule::Impl::removeConversation(const std::string& conversationId) bool ConversationModule::Impl::removeConversationImpl(SyncedConversation& conv) { - auto members = conv.getMembers(); + auto members = conv.getMembers(false, false); auto isSyncing = !conv.conversation; - auto hasMembers = !isSyncing && !(members.size() == 1 && username_ == members[0]["uri"]); + auto hasMembers = !isSyncing // If syncing there is no member to inform + && std::find_if(members.begin(), members.end(), [&](const auto& member) { + return member.at("uri") == username_; + }) != members.end() // We must be still a member + && members.size() != 1; // If there is only ourself conv.info.removed = std::time(nullptr); if (isSyncing) conv.info.erased = std::time(nullptr); diff --git a/src/jamidht/conversationrepository.cpp b/src/jamidht/conversationrepository.cpp index 59d3ce2e5bb2ab05bf80936ff185fa752613f30d..f7498541286de6be7e339a14637e5aed6f176ff6 100644 --- a/src/jamidht/conversationrepository.cpp +++ b/src/jamidht/conversationrepository.cpp @@ -3382,7 +3382,7 @@ ConversationRepository::leave() // Remove related files std::filesystem::path repoPath = git_repository_workdir(repo.get()); auto crt = fmt::format("{}.crt", uri); - auto adminFile = repoPath / "admin" / crt; + auto adminFile = repoPath / "admins" / crt; auto memberFile = repoPath / "members" / crt; auto crlsPath = repoPath / "CRLs";