Compare commits
2 Commits
sdl_image
...
dev-998000
Author | SHA1 | Date | |
---|---|---|---|
998000aa3a | |||
e66f4651d0 |
2
external/solanaceae_contact
vendored
2
external/solanaceae_contact
vendored
Submodule external/solanaceae_contact updated: e40271670b...7710da6c89
2
external/solanaceae_tox
vendored
2
external/solanaceae_tox
vendored
Submodule external/solanaceae_tox updated: 25857b8aa7...1d724ef951
@ -197,9 +197,10 @@ float ChatGui4::render(float time_delta) {
|
|||||||
sub_contacts = &_cr.get<Contact::Components::ParentOf>(*_selected_contact).subs;
|
sub_contacts = &_cr.get<Contact::Components::ParentOf>(*_selected_contact).subs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const bool highlight_private {!_cr.all_of<Contact::Components::TagPrivate>(*_selected_contact)};
|
||||||
|
|
||||||
if (ImGui::BeginChild(chat_label.c_str(), {0, 0}, true)) {
|
if (ImGui::BeginChild(chat_label.c_str(), {0, 0}, true)) {
|
||||||
//if (_cr.all_of<Contact::Components::ParentOf>(*_selected_contact)) {
|
if (sub_contacts != nullptr && !_cr.all_of<Contact::Components::TagPrivate>(*_selected_contact) && _cr.all_of<Contact::Components::TagGroup>(*_selected_contact)) {
|
||||||
if (sub_contacts != nullptr) {
|
|
||||||
if (!sub_contacts->empty()) {
|
if (!sub_contacts->empty()) {
|
||||||
if (ImGui::BeginChild("subcontacts", {150, -100}, true)) {
|
if (ImGui::BeginChild("subcontacts", {150, -100}, true)) {
|
||||||
ImGui::Text("subs: %zu", sub_contacts->size());
|
ImGui::Text("subs: %zu", sub_contacts->size());
|
||||||
@ -417,7 +418,7 @@ float ChatGui4::render(float time_delta) {
|
|||||||
std::optional<ImVec4> row_bg;
|
std::optional<ImVec4> row_bg;
|
||||||
|
|
||||||
// private group message
|
// private group message
|
||||||
if (_cr.any_of<Contact::Components::TagSelfWeak, Contact::Components::TagSelfStrong>(c_to.c)) {
|
if (highlight_private && _cr.any_of<Contact::Components::TagSelfWeak, Contact::Components::TagSelfStrong>(c_to.c)) {
|
||||||
const ImVec4 priv_msg_hi_col = ImVec4(0.5f, 0.2f, 0.5f, 0.35f);
|
const ImVec4 priv_msg_hi_col = ImVec4(0.5f, 0.2f, 0.5f, 0.35f);
|
||||||
ImU32 row_bg_color = ImGui::GetColorU32(priv_msg_hi_col);
|
ImU32 row_bg_color = ImGui::GetColorU32(priv_msg_hi_col);
|
||||||
ImGui::TableSetBgColor(ImGuiTableBgTarget_RowBg1, row_bg_color);
|
ImGui::TableSetBgColor(ImGuiTableBgTarget_RowBg1, row_bg_color);
|
||||||
@ -456,7 +457,10 @@ float ChatGui4::render(float time_delta) {
|
|||||||
if (ImGui::TableNextColumn()) {
|
if (ImGui::TableNextColumn()) {
|
||||||
// TODO: theming for hardcoded values
|
// TODO: theming for hardcoded values
|
||||||
|
|
||||||
if (msg_reg.all_of<Message::Components::Remote::TimestampReceived>(e)) {
|
if (!msg_reg.all_of<Message::Components::Remote::TimestampReceived>(e)) {
|
||||||
|
// TODO: dedup?
|
||||||
|
ImGui::TextDisabled("_");
|
||||||
|
} else {
|
||||||
const auto list = msg_reg.get<Message::Components::Remote::TimestampReceived>(e).ts;
|
const auto list = msg_reg.get<Message::Components::Remote::TimestampReceived>(e).ts;
|
||||||
// wrongly assumes contacts never get removed from a group
|
// wrongly assumes contacts never get removed from a group
|
||||||
if (sub_contacts != nullptr && list.size() < sub_contacts->size()) {
|
if (sub_contacts != nullptr && list.size() < sub_contacts->size()) {
|
||||||
@ -471,6 +475,7 @@ float ChatGui4::render(float time_delta) {
|
|||||||
std::string synced_by_text {"delivery confirmed by:"};
|
std::string synced_by_text {"delivery confirmed by:"};
|
||||||
const int64_t now_ts_s = int64_t(Message::getTimeMS() / 1000u);
|
const int64_t now_ts_s = int64_t(Message::getTimeMS() / 1000u);
|
||||||
|
|
||||||
|
size_t other_contacts {0};
|
||||||
for (const auto& [c, syned_ts] : list) {
|
for (const auto& [c, syned_ts] : list) {
|
||||||
if (_cr.all_of<Contact::Components::TagSelfStrong>(c)) {
|
if (_cr.all_of<Contact::Components::TagSelfStrong>(c)) {
|
||||||
//synced_by_text += "\n sself(!)"; // makes no sense
|
//synced_by_text += "\n sself(!)"; // makes no sense
|
||||||
@ -480,16 +485,19 @@ float ChatGui4::render(float time_delta) {
|
|||||||
} else {
|
} else {
|
||||||
synced_by_text += "\n >" + (_cr.all_of<Contact::Components::Name>(c) ? _cr.get<Contact::Components::Name>(c).name : "<unk>");
|
synced_by_text += "\n >" + (_cr.all_of<Contact::Components::Name>(c) ? _cr.get<Contact::Components::Name>(c).name : "<unk>");
|
||||||
}
|
}
|
||||||
|
other_contacts += 1;
|
||||||
const int64_t seconds_ago = (int64_t(syned_ts / 1000u) - now_ts_s) * -1;
|
const int64_t seconds_ago = (int64_t(syned_ts / 1000u) - now_ts_s) * -1;
|
||||||
synced_by_text += " (" + std::to_string(seconds_ago) + "sec ago)";
|
synced_by_text += " (" + std::to_string(seconds_ago) + "sec ago)";
|
||||||
}
|
}
|
||||||
|
|
||||||
ImGui::Text("%s", synced_by_text.c_str());
|
if (other_contacts > 0) {
|
||||||
|
ImGui::Text("%s", synced_by_text.c_str());
|
||||||
|
} else {
|
||||||
|
ImGui::TextUnformatted("no delivery confirmation");
|
||||||
|
}
|
||||||
|
|
||||||
ImGui::EndTooltip();
|
ImGui::EndTooltip();
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
ImGui::TextDisabled("_");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
@ -1051,7 +1059,7 @@ void ChatGui4::renderMessageExtra(Message3Registry& reg, const Message3 e) {
|
|||||||
|
|
||||||
for (const auto& [c, syned_ts] : reg.get<Message::Components::Remote::TimestampReceived>(e).ts) {
|
for (const auto& [c, syned_ts] : reg.get<Message::Components::Remote::TimestampReceived>(e).ts) {
|
||||||
if (_cr.all_of<Contact::Components::TagSelfStrong>(c)) {
|
if (_cr.all_of<Contact::Components::TagSelfStrong>(c)) {
|
||||||
synced_by_text += "\n sself(!)"; // makes no sense
|
synced_by_text += "\n sself"; // required (except when synced externally)
|
||||||
} else if (_cr.all_of<Contact::Components::TagSelfWeak>(c)) {
|
} else if (_cr.all_of<Contact::Components::TagSelfWeak>(c)) {
|
||||||
synced_by_text += "\n wself";
|
synced_by_text += "\n wself";
|
||||||
} else {
|
} else {
|
||||||
|
@ -3,7 +3,6 @@
|
|||||||
#include "./image_loader_webp.hpp"
|
#include "./image_loader_webp.hpp"
|
||||||
#include "./image_loader_sdl_bmp.hpp"
|
#include "./image_loader_sdl_bmp.hpp"
|
||||||
#include "./image_loader_qoi.hpp"
|
#include "./image_loader_qoi.hpp"
|
||||||
#include "./image_loader_stb.hpp"
|
|
||||||
#include "./image_loader_sdl_image.hpp"
|
#include "./image_loader_sdl_image.hpp"
|
||||||
|
|
||||||
#include <solanaceae/message3/components.hpp>
|
#include <solanaceae/message3/components.hpp>
|
||||||
@ -81,7 +80,6 @@ MediaMetaInfoLoader::MediaMetaInfoLoader(RegistryMessageModel& rmm) : _rmm(rmm)
|
|||||||
_image_loaders.push_back(std::make_unique<ImageLoaderSDLBMP>());
|
_image_loaders.push_back(std::make_unique<ImageLoaderSDLBMP>());
|
||||||
_image_loaders.push_back(std::make_unique<ImageLoaderQOI>());
|
_image_loaders.push_back(std::make_unique<ImageLoaderQOI>());
|
||||||
_image_loaders.push_back(std::make_unique<ImageLoaderSDLImage>());
|
_image_loaders.push_back(std::make_unique<ImageLoaderSDLImage>());
|
||||||
_image_loaders.push_back(std::make_unique<ImageLoaderSTB>());
|
|
||||||
|
|
||||||
_rmm.subscribe(this, RegistryMessageModel_Event::message_construct);
|
_rmm.subscribe(this, RegistryMessageModel_Event::message_construct);
|
||||||
_rmm.subscribe(this, RegistryMessageModel_Event::message_updated);
|
_rmm.subscribe(this, RegistryMessageModel_Event::message_updated);
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
|
|
||||||
#include "./image_loader_sdl_bmp.hpp"
|
#include "./image_loader_sdl_bmp.hpp"
|
||||||
#include "./image_loader_qoi.hpp"
|
#include "./image_loader_qoi.hpp"
|
||||||
#include "./image_loader_stb.hpp"
|
|
||||||
#include "./image_loader_webp.hpp"
|
#include "./image_loader_webp.hpp"
|
||||||
#include "./image_loader_sdl_image.hpp"
|
#include "./image_loader_sdl_image.hpp"
|
||||||
#include "./media_meta_info_loader.hpp"
|
#include "./media_meta_info_loader.hpp"
|
||||||
@ -24,7 +23,6 @@ MessageImageLoader::MessageImageLoader(void) {
|
|||||||
_image_loaders.push_back(std::make_unique<ImageLoaderQOI>());
|
_image_loaders.push_back(std::make_unique<ImageLoaderQOI>());
|
||||||
_image_loaders.push_back(std::make_unique<ImageLoaderWebP>());
|
_image_loaders.push_back(std::make_unique<ImageLoaderWebP>());
|
||||||
_image_loaders.push_back(std::make_unique<ImageLoaderSDLImage>());
|
_image_loaders.push_back(std::make_unique<ImageLoaderSDLImage>());
|
||||||
_image_loaders.push_back(std::make_unique<ImageLoaderSTB>());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::optional<TextureEntry> MessageImageLoader::load(TextureUploaderI& tu, Message3Handle m) {
|
std::optional<TextureEntry> MessageImageLoader::load(TextureUploaderI& tu, Message3Handle m) {
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
#include "./image_loader_stb.hpp"
|
#include "./image_loader_stb.hpp"
|
||||||
#include "./image_loader_webp.hpp"
|
#include "./image_loader_webp.hpp"
|
||||||
#include "./image_loader_qoi.hpp"
|
#include "./image_loader_qoi.hpp"
|
||||||
|
#include "./image_loader_sdl_image.hpp"
|
||||||
|
|
||||||
#include <imgui/imgui.h>
|
#include <imgui/imgui.h>
|
||||||
|
|
||||||
@ -16,7 +17,7 @@ SendImagePopup::SendImagePopup(TextureUploaderI& tu) : _tu(tu) {
|
|||||||
_image_loaders.push_back(std::make_unique<ImageLoaderSDLBMP>());
|
_image_loaders.push_back(std::make_unique<ImageLoaderSDLBMP>());
|
||||||
_image_loaders.push_back(std::make_unique<ImageLoaderQOI>());
|
_image_loaders.push_back(std::make_unique<ImageLoaderQOI>());
|
||||||
_image_loaders.push_back(std::make_unique<ImageLoaderWebP>());
|
_image_loaders.push_back(std::make_unique<ImageLoaderWebP>());
|
||||||
_image_loaders.push_back(std::make_unique<ImageLoaderSTB>());
|
_image_loaders.push_back(std::make_unique<ImageLoaderSDLImage>());
|
||||||
}
|
}
|
||||||
|
|
||||||
void SendImagePopup::reset(void) {
|
void SendImagePopup::reset(void) {
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
|
|
||||||
#include "./image_loader_sdl_bmp.hpp"
|
#include "./image_loader_sdl_bmp.hpp"
|
||||||
#include "./image_loader_qoi.hpp"
|
#include "./image_loader_qoi.hpp"
|
||||||
#include "./image_loader_stb.hpp"
|
|
||||||
#include "./image_loader_webp.hpp"
|
#include "./image_loader_webp.hpp"
|
||||||
#include "./image_loader_sdl_image.hpp"
|
#include "./image_loader_sdl_image.hpp"
|
||||||
|
|
||||||
@ -26,7 +25,6 @@ ToxAvatarLoader::ToxAvatarLoader(Contact3Registry& cr) : _cr(cr) {
|
|||||||
_image_loaders.push_back(std::make_unique<ImageLoaderQOI>());
|
_image_loaders.push_back(std::make_unique<ImageLoaderQOI>());
|
||||||
_image_loaders.push_back(std::make_unique<ImageLoaderWebP>());
|
_image_loaders.push_back(std::make_unique<ImageLoaderWebP>());
|
||||||
_image_loaders.push_back(std::make_unique<ImageLoaderSDLImage>());
|
_image_loaders.push_back(std::make_unique<ImageLoaderSDLImage>());
|
||||||
_image_loaders.push_back(std::make_unique<ImageLoaderSTB>());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static float getHue_6bytes(const uint8_t* data) {
|
static float getHue_6bytes(const uint8_t* data) {
|
||||||
|
@ -107,6 +107,12 @@ ToxFriendFauxOfflineMessaging::dfmc_Ret ToxFriendFauxOfflineMessaging::doFriendM
|
|||||||
|
|
||||||
const uint64_t ts_now = Message::getTimeMS();
|
const uint64_t ts_now = Message::getTimeMS();
|
||||||
|
|
||||||
|
if (!_cr.all_of<Contact::Components::Self>(c)) {
|
||||||
|
return dfmc_Ret::NO_MSG; // error
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto self_c = _cr.get<Contact::Components::Self>(c).self;
|
||||||
|
|
||||||
// filter for unconfirmed messages
|
// filter for unconfirmed messages
|
||||||
|
|
||||||
// we assume sorted
|
// we assume sorted
|
||||||
@ -127,9 +133,8 @@ ToxFriendFauxOfflineMessaging::dfmc_Ret ToxFriendFauxOfflineMessaging::doFriendM
|
|||||||
continue; // skip
|
continue; // skip
|
||||||
}
|
}
|
||||||
|
|
||||||
// exclude
|
if (!mr->any_of<
|
||||||
if (mr->any_of<
|
Message::Components::Remote::TimestampReceived
|
||||||
Message::Components::Remote::TimestampReceived // this acts like a tag, which is wrong in groups
|
|
||||||
>(msg)
|
>(msg)
|
||||||
) {
|
) {
|
||||||
continue; // skip
|
continue; // skip
|
||||||
@ -139,6 +144,16 @@ ToxFriendFauxOfflineMessaging::dfmc_Ret ToxFriendFauxOfflineMessaging::doFriendM
|
|||||||
continue; // not outbound (in private)
|
continue; // not outbound (in private)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const auto& ts_received = mr->get<Message::Components::Remote::TimestampReceived>(msg).ts;
|
||||||
|
// not target
|
||||||
|
if (ts_received.contains(c)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
// needs to contain self
|
||||||
|
if (!ts_received.contains(self_c)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
valid_unsent = true;
|
valid_unsent = true;
|
||||||
|
|
||||||
uint64_t msg_ts = msg_view.get<Message::Components::Timestamp>(msg).ts;
|
uint64_t msg_ts = msg_view.get<Message::Components::Timestamp>(msg).ts;
|
||||||
|
Reference in New Issue
Block a user