[session] redo marked_session_lines

pull/1242/head
Tim Stack 3 months ago
parent 6bb616e034
commit 31cf49ec0d

@ -134,8 +134,22 @@ static const char* UPGRADE_STMTS[] = {
static const size_t MAX_SESSIONS = 8;
static const size_t MAX_SESSION_FILE_COUNT = 256;
static std::vector<content_line_t> marked_session_lines;
static std::vector<content_line_t> offset_session_lines;
struct session_line {
session_line(struct timeval tv,
intern_string_t format_name,
std::string line_hash)
: sl_time(tv), sl_format_name(format_name),
sl_line_hash(std::move(line_hash))
{
}
struct timeval sl_time;
intern_string_t sl_format_name;
std::string sl_line_hash;
};
static std::vector<session_line> marked_session_lines;
static std::vector<session_line> offset_session_lines;
static bool
bind_line(sqlite3* db,
@ -143,7 +157,7 @@ bind_line(sqlite3* db,
content_line_t cl,
time_t session_time)
{
logfile_sub_source& lss = lnav_data.ld_log_source;
auto& lss = lnav_data.ld_log_source;
auto lf = lss.find(cl);
if (lf == nullptr) {
@ -179,7 +193,9 @@ bind_line(sqlite3* db,
struct session_file_info {
session_file_info(int timestamp, std::string id, std::string path)
: sfi_timestamp(timestamp), sfi_id(std::move(id)),
sfi_path(std::move(path)){};
sfi_path(std::move(path))
{
}
bool operator<(const session_file_info& other) const
{
@ -190,7 +206,7 @@ struct session_file_info {
return true;
}
return false;
};
}
int sfi_timestamp;
std::string sfi_id;
@ -654,7 +670,10 @@ load_time_bookmarks()
}
}
if (!meta) {
marked_session_lines.push_back(line_cl);
marked_session_lines.emplace_back(
lf->original_line_time(line_iter),
format->get_name(),
line_hash);
lss.set_user_mark(&textview_curses::BM_USER,
line_cl);
}
@ -778,11 +797,12 @@ load_time_bookmarks()
if (lf->get_content_id() == log_hash) {
int file_line
= std::distance(lf->begin(), line_iter);
content_line_t line_cl
= content_line_t(base_content_line + file_line);
struct timeval offset;
offset_session_lines.push_back(line_cl);
offset_session_lines.emplace_back(
lf->original_line_time(line_iter),
lf->get_format_ptr()->get_name(),
log_hash);
offset.tv_sec = sqlite3_column_int64(stmt.in(), 4);
offset.tv_usec = sqlite3_column_int64(stmt.in(), 5);
lf->adjust_content_time(file_line, offset);
@ -974,13 +994,41 @@ save_user_bookmarks(sqlite3* db,
sqlite3_stmt* stmt,
bookmark_vector<content_line_t>& user_marks)
{
logfile_sub_source& lss = lnav_data.ld_log_source;
bookmark_vector<content_line_t>::iterator iter;
auto& lss = lnav_data.ld_log_source;
for (iter = user_marks.begin(); iter != user_marks.end(); ++iter) {
for (auto iter = user_marks.begin(); iter != user_marks.end(); ++iter) {
content_line_t cl = *iter;
auto line_meta_opt = lss.find_bookmark_metadata(cl);
if (!bind_line(db, stmt, cl, lnav_data.ld_session_time)) {
auto lf = lss.find(cl);
if (lf == nullptr) {
continue;
}
sqlite3_clear_bindings(stmt);
auto line_iter = lf->begin() + cl;
auto read_result = lf->read_line(line_iter);
if (read_result.isErr()) {
continue;
}
auto line_hash = read_result
.map([cl](auto sbr) {
return hasher()
.update(sbr.get_data(), sbr.length())
.update(cl)
.to_string();
})
.unwrap();
if (bind_values(stmt,
lf->original_line_time(line_iter),
lf->get_format()->get_name(),
line_hash,
lnav_data.ld_session_time)
!= SQLITE_OK)
{
continue;
}
@ -1071,7 +1119,9 @@ save_user_bookmarks(sqlite3* db,
return;
}
marked_session_lines.push_back(cl);
marked_session_lines.emplace_back(lf->original_line_time(line_iter),
lf->get_format_ptr()->get_name(),
line_hash);
sqlite3_reset(stmt);
}
@ -1155,10 +1205,14 @@ save_time_bookmarks()
}
for (auto& marked_session_line : marked_session_lines) {
if (!bind_line(db.in(),
stmt.in(),
marked_session_line,
lnav_data.ld_session_time))
sqlite3_clear_bindings(stmt.in());
if (bind_values(stmt,
marked_session_line.sl_time,
marked_session_line.sl_format_name,
marked_session_line.sl_line_hash,
lnav_data.ld_session_time)
!= SQLITE_OK)
{
continue;
}
@ -1249,10 +1303,14 @@ save_time_bookmarks()
}
for (auto& offset_session_line : offset_session_lines) {
if (!bind_line(db.in(),
stmt.in(),
offset_session_line,
lnav_data.ld_session_time))
sqlite3_clear_bindings(stmt.in());
if (bind_values(stmt,
offset_session_line.sl_time,
offset_session_line.sl_format_name,
offset_session_line.sl_line_hash,
lnav_data.ld_session_time)
!= SQLITE_OK)
{
continue;
}

Loading…
Cancel
Save