Compare commits
No commits in common. "719400068a4f381018d2840678289f6ce50062a4" and "dc081ae2aa35d7649bd5e3a96768ba0eeb2fbc64" have entirely different histories.
719400068a
...
dc081ae2aa
@ -35,16 +35,6 @@ namespace Components {
|
|||||||
float fade {1.f};
|
float fade {1.f};
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ConvertedTimeCache {
|
|
||||||
// calling localtime is expensive af
|
|
||||||
int tm_year {0};
|
|
||||||
int tm_yday {0};
|
|
||||||
int tm_mon {0};
|
|
||||||
int tm_mday {0};
|
|
||||||
int tm_hour {0};
|
|
||||||
int tm_min {0};
|
|
||||||
};
|
|
||||||
|
|
||||||
} // Components
|
} // Components
|
||||||
|
|
||||||
static constexpr float lerp(float a, float b, float t) {
|
static constexpr float lerp(float a, float b, float t) {
|
||||||
@ -334,8 +324,7 @@ float ChatGui4::render(float time_delta) {
|
|||||||
//tmp_view.use<Message::Components::Timestamp>();
|
//tmp_view.use<Message::Components::Timestamp>();
|
||||||
//tmp_view.each([&](const Message3 e, Message::Components::ContactFrom& c_from, Message::Components::ContactTo& c_to, Message::Components::Timestamp ts
|
//tmp_view.each([&](const Message3 e, Message::Components::ContactFrom& c_from, Message::Components::ContactTo& c_to, Message::Components::Timestamp ts
|
||||||
//) {
|
//) {
|
||||||
//uint64_t prev_ts {0};
|
uint64_t prev_ts {0};
|
||||||
Components::ConvertedTimeCache prev_time {};
|
|
||||||
auto tmp_view = msg_reg.view<Message::Components::Timestamp>();
|
auto tmp_view = msg_reg.view<Message::Components::Timestamp>();
|
||||||
for (auto view_it = tmp_view.rbegin(), view_last = tmp_view.rend(); view_it != view_last; view_it++) {
|
for (auto view_it = tmp_view.rbegin(), view_last = tmp_view.rend(); view_it != view_last; view_it++) {
|
||||||
const Message3 e = *view_it;
|
const Message3 e = *view_it;
|
||||||
@ -353,12 +342,15 @@ float ChatGui4::render(float time_delta) {
|
|||||||
// TODO: why?
|
// TODO: why?
|
||||||
ImGui::TableNextRow(0, TEXT_BASE_HEIGHT);
|
ImGui::TableNextRow(0, TEXT_BASE_HEIGHT);
|
||||||
|
|
||||||
if (msg_reg.all_of<Components::ConvertedTimeCache>(e)) { // check if date changed
|
{ // check if date changed
|
||||||
// TODO: move conversion up?
|
// TODO: find defined ways of casting to time_t
|
||||||
const auto& next_time = msg_reg.get<Components::ConvertedTimeCache>(e);
|
std::time_t prev = prev_ts / 1000;
|
||||||
|
std::time_t next = ts.ts / 1000;
|
||||||
|
std::tm prev_tm = *std::localtime(&prev);
|
||||||
|
std::tm next_tm = *std::localtime(&next);
|
||||||
if (
|
if (
|
||||||
prev_time.tm_yday != next_time.tm_yday ||
|
prev_tm.tm_yday != next_tm.tm_yday ||
|
||||||
prev_time.tm_year != next_time.tm_year // making sure
|
prev_tm.tm_year != next_tm.tm_year // making sure
|
||||||
) {
|
) {
|
||||||
// name
|
// name
|
||||||
if (ImGui::TableNextColumn()) {
|
if (ImGui::TableNextColumn()) {
|
||||||
@ -367,14 +359,14 @@ float ChatGui4::render(float time_delta) {
|
|||||||
// msg
|
// msg
|
||||||
if (ImGui::TableNextColumn()) {
|
if (ImGui::TableNextColumn()) {
|
||||||
ImGui::TextDisabled("DATE CHANGED from %d.%d.%d to %d.%d.%d",
|
ImGui::TextDisabled("DATE CHANGED from %d.%d.%d to %d.%d.%d",
|
||||||
1900+prev_time.tm_year, 1+prev_time.tm_mon, prev_time.tm_mday,
|
1900+prev_tm.tm_year, 1+prev_tm.tm_mon, prev_tm.tm_mday,
|
||||||
1900+next_time.tm_year, 1+next_time.tm_mon, next_time.tm_mday
|
1900+next_tm.tm_year, 1+next_tm.tm_mon, next_tm.tm_mday
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
ImGui::TableNextRow(0, TEXT_BASE_HEIGHT);
|
ImGui::TableNextRow(0, TEXT_BASE_HEIGHT);
|
||||||
}
|
}
|
||||||
|
|
||||||
prev_time = next_time;
|
prev_ts = ts.ts;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -527,24 +519,12 @@ float ChatGui4::render(float time_delta) {
|
|||||||
|
|
||||||
// ts
|
// ts
|
||||||
if (ImGui::TableNextColumn()) {
|
if (ImGui::TableNextColumn()) {
|
||||||
if (!msg_reg.all_of<Components::ConvertedTimeCache>(e)) {
|
|
||||||
auto time = std::chrono::system_clock::to_time_t(
|
auto time = std::chrono::system_clock::to_time_t(
|
||||||
std::chrono::time_point<std::chrono::system_clock, std::chrono::milliseconds>{std::chrono::milliseconds{ts.ts}}
|
std::chrono::time_point<std::chrono::system_clock, std::chrono::milliseconds>{std::chrono::milliseconds{ts.ts}}
|
||||||
);
|
);
|
||||||
auto localtime = std::localtime(&time);
|
auto localtime = std::localtime(&time);
|
||||||
msg_reg.emplace<Components::ConvertedTimeCache>(
|
|
||||||
e,
|
|
||||||
localtime->tm_year,
|
|
||||||
localtime->tm_yday,
|
|
||||||
localtime->tm_mon,
|
|
||||||
localtime->tm_mday,
|
|
||||||
localtime->tm_hour,
|
|
||||||
localtime->tm_min
|
|
||||||
);
|
|
||||||
}
|
|
||||||
const auto& ctc = msg_reg.get<Components::ConvertedTimeCache>(e);
|
|
||||||
|
|
||||||
ImGui::Text("%.2d:%.2d", ctc.tm_hour, ctc.tm_min);
|
ImGui::Text("%.2d:%.2d", localtime->tm_hour, localtime->tm_min);
|
||||||
}
|
}
|
||||||
|
|
||||||
// extra
|
// extra
|
||||||
|
@ -376,7 +376,7 @@ Screen* MainScreen::render(float time_delta, bool&) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Screen* MainScreen::tick(float time_delta, bool& quit) {
|
Screen* MainScreen::tick(float time_delta, bool& quit) {
|
||||||
quit = !tc.iterate(time_delta); // compute
|
quit = !tc.iterate(); // compute
|
||||||
|
|
||||||
tcm.iterate(time_delta); // compute
|
tcm.iterate(time_delta); // compute
|
||||||
|
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
#include "./tox_client.hpp"
|
#include "./tox_client.hpp"
|
||||||
|
#include "toxcore/tox.h"
|
||||||
|
|
||||||
// meh, change this
|
// meh, change this
|
||||||
#include <exception>
|
#include <exception>
|
||||||
@ -120,13 +121,10 @@ ToxClient::ToxClient(std::string_view save_path, std::string_view save_password)
|
|||||||
}
|
}
|
||||||
|
|
||||||
ToxClient::~ToxClient(void) {
|
ToxClient::~ToxClient(void) {
|
||||||
if (_tox_profile_dirty) {
|
|
||||||
saveToxProfile();
|
|
||||||
}
|
|
||||||
tox_kill(_tox);
|
tox_kill(_tox);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ToxClient::iterate(float time_delta) {
|
bool ToxClient::iterate(void) {
|
||||||
Tox_Err_Events_Iterate err_e_it = TOX_ERR_EVENTS_ITERATE_OK;
|
Tox_Err_Events_Iterate err_e_it = TOX_ERR_EVENTS_ITERATE_OK;
|
||||||
auto* events = tox_events_iterate(_tox, false, &err_e_it);
|
auto* events = tox_events_iterate(_tox, false, &err_e_it);
|
||||||
if (err_e_it == TOX_ERR_EVENTS_ITERATE_OK && events != nullptr) {
|
if (err_e_it == TOX_ERR_EVENTS_ITERATE_OK && events != nullptr) {
|
||||||
@ -138,8 +136,7 @@ bool ToxClient::iterate(float time_delta) {
|
|||||||
|
|
||||||
tox_events_free(events);
|
tox_events_free(events);
|
||||||
|
|
||||||
_save_heat -= time_delta;
|
if (_tox_profile_dirty) {
|
||||||
if (_tox_profile_dirty && _save_heat <= 0.f) {
|
|
||||||
saveToxProfile();
|
saveToxProfile();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -183,6 +180,5 @@ void ToxClient::saveToxProfile(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_tox_profile_dirty = false;
|
_tox_profile_dirty = false;
|
||||||
_save_heat = 10.f;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -22,7 +22,6 @@ class ToxClient : public ToxDefaultImpl, public ToxEventProviderBase {
|
|||||||
std::string _tox_profile_path;
|
std::string _tox_profile_path;
|
||||||
std::string _tox_profile_password;
|
std::string _tox_profile_password;
|
||||||
bool _tox_profile_dirty {true}; // set in callbacks
|
bool _tox_profile_dirty {true}; // set in callbacks
|
||||||
float _save_heat {0.f};
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
//ToxClient(/*const CommandLine& cl*/);
|
//ToxClient(/*const CommandLine& cl*/);
|
||||||
@ -35,7 +34,7 @@ class ToxClient : public ToxDefaultImpl, public ToxEventProviderBase {
|
|||||||
void setDirty(void) { _tox_profile_dirty = true; }
|
void setDirty(void) { _tox_profile_dirty = true; }
|
||||||
|
|
||||||
// returns false when we shoul stop the program
|
// returns false when we shoul stop the program
|
||||||
bool iterate(float time_delta);
|
bool iterate(void);
|
||||||
void stop(void); // let it know it should exit
|
void stop(void); // let it know it should exit
|
||||||
|
|
||||||
void setToxProfilePath(const std::string& new_path) { _tox_profile_path = new_path; }
|
void setToxProfilePath(const std::string& new_path) { _tox_profile_path = new_path; }
|
||||||
|
Loading…
x
Reference in New Issue
Block a user