Skip to content

Commit 43bd9ca

Browse files
committed
Moved bookmark toggling logic into Rust.
1 parent a63bef4 commit 43bd9ca

File tree

2 files changed

+45
-10
lines changed

2 files changed

+45
-10
lines changed

app/document_manager.cpp

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -559,9 +559,7 @@ void document_manager::toggle_bookmark() const {
559559
bookmark_start = current_pos;
560560
bookmark_end = current_pos;
561561
}
562-
const auto info = bookmark_info(config.backend_for_ffi(), tab->file_path.ToUTF8().data(), bookmark_start, bookmark_end);
563-
const bool was_bookmarked = info.found;
564-
config.toggle_bookmark(tab->file_path, bookmark_start, bookmark_end);
562+
const bool was_bookmarked = config_manager_toggle_bookmark_with_result(config.backend_for_ffi_mut(), tab->file_path.ToUTF8().data(), bookmark_start, bookmark_end, "");
565563
config.flush();
566564
speak(was_bookmarked ? _("Bookmark removed") : _("Bookmarked"));
567565
}
@@ -589,13 +587,8 @@ void document_manager::add_bookmark_with_note() const {
589587
note_entry_dialog note_dialog(nullptr, _("Bookmark Note"), prompt, existing_note);
590588
if (note_dialog.ShowModal() != wxID_OK) return;
591589
wxString note = note_dialog.get_note();
592-
if (bookmark_exists) {
593-
config.update_bookmark_note(tab->file_path, bookmark_start, bookmark_end, note);
594-
speak(_("Bookmark note updated"));
595-
} else {
596-
config.add_bookmark(tab->file_path, bookmark_start, bookmark_end, note);
597-
speak(_("Bookmarked with note"));
598-
}
590+
const bool updated = config_manager_upsert_bookmark_note(config.backend_for_ffi_mut(), tab->file_path.ToUTF8().data(), bookmark_start, bookmark_end, note.ToUTF8().data());
591+
speak(updated ? _("Bookmark note updated") : _("Bookmarked with note"));
599592
config.flush();
600593
}
601594

lib/src/bridge.rs

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -319,6 +319,20 @@ pub mod ffi {
319319
fn config_manager_add_bookmark(manager: &mut ConfigManager, path: &str, start: i64, end: i64, note: &str);
320320
fn config_manager_remove_bookmark(manager: &mut ConfigManager, path: &str, start: i64, end: i64);
321321
fn config_manager_toggle_bookmark(manager: &mut ConfigManager, path: &str, start: i64, end: i64, note: &str);
322+
fn config_manager_toggle_bookmark_with_result(
323+
manager: &mut ConfigManager,
324+
path: &str,
325+
start: i64,
326+
end: i64,
327+
note: &str,
328+
) -> bool;
329+
fn config_manager_upsert_bookmark_note(
330+
manager: &mut ConfigManager,
331+
path: &str,
332+
start: i64,
333+
end: i64,
334+
note: &str,
335+
) -> bool;
322336
fn config_manager_update_bookmark_note(
323337
manager: &mut ConfigManager,
324338
path: &str,
@@ -621,6 +635,34 @@ fn config_manager_toggle_bookmark(manager: &mut RustConfigManager, path: &str, s
621635
manager.toggle_bookmark(path, start, end, note);
622636
}
623637

638+
fn config_manager_toggle_bookmark_with_result(
639+
manager: &mut RustConfigManager,
640+
path: &str,
641+
start: i64,
642+
end: i64,
643+
note: &str,
644+
) -> bool {
645+
let was_bookmarked = manager.get_bookmarks(path).iter().any(|bm| bm.start == start && bm.end == end);
646+
manager.toggle_bookmark(path, start, end, note);
647+
was_bookmarked
648+
}
649+
650+
fn config_manager_upsert_bookmark_note(
651+
manager: &mut RustConfigManager,
652+
path: &str,
653+
start: i64,
654+
end: i64,
655+
note: &str,
656+
) -> bool {
657+
let exists = manager.get_bookmarks(path).iter().any(|bm| bm.start == start && bm.end == end);
658+
if exists {
659+
manager.update_bookmark_note(path, start, end, note);
660+
} else {
661+
manager.add_bookmark(path, start, end, note);
662+
}
663+
exists
664+
}
665+
624666
fn config_manager_update_bookmark_note(manager: &mut RustConfigManager, path: &str, start: i64, end: i64, note: &str) {
625667
manager.update_bookmark_note(path, start, end, note);
626668
}

0 commit comments

Comments
 (0)