[gnote] Search for linking notes using full link tag
- From: Aurimas Černius <aurimasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnote] Search for linking notes using full link tag
- Date: Mon, 28 Oct 2013 21:28:35 +0000 (UTC)
commit ff206586ae7beb26f0e46fe918359c92ec6e83bf
Author: Aurimas Černius <aurisc4 gmail com>
Date: Mon Oct 28 23:28:13 2013 +0200
Search for linking notes using full link tag
Fixes Bug 701492.
src/addins/backlinks/backlinksnoteaddin.cpp | 17 ++++-------------
src/note.cpp | 13 +------------
src/notemanager.cpp | 14 ++++++++++++++
src/notemanager.hpp | 1 +
4 files changed, 20 insertions(+), 25 deletions(-)
---
diff --git a/src/addins/backlinks/backlinksnoteaddin.cpp b/src/addins/backlinks/backlinksnoteaddin.cpp
index 52255ad..2bd1417 100644
--- a/src/addins/backlinks/backlinksnoteaddin.cpp
+++ b/src/addins/backlinks/backlinksnoteaddin.cpp
@@ -93,19 +93,10 @@ void BacklinksNoteAddin::update_menu(Gtk::Menu *menu)
void BacklinksNoteAddin::get_backlink_menu_items(std::list<BacklinkMenuItem*> & items)
{
- std::string search_title = get_note()->get_title();
- std::string encoded_title = sharp::string_trim(
- gnote::utils::XmlEncoder::encode(sharp::string_to_lower(search_title)));
-
- // Go through each note looking for
- // notes that link to this one.
- const gnote::Note::List & list = get_note()->manager().get_notes();
- for(gnote::Note::List::const_iterator iter = list.begin();
- iter != list.end(); ++iter) {
- const gnote::Note::Ptr & note(*iter);
- if (note != get_note() // don't match ourself
- && check_note_has_match (note, encoded_title)) {
- BacklinkMenuItem *item = manage(new BacklinkMenuItem (note, search_title));
+ gnote::Note::List notes = get_note()->manager().get_notes_linking_to(get_note()->get_title());
+ FOREACH(const gnote::Note::Ptr & note, notes) {
+ if(note != get_note()) { // don't match ourself
+ BacklinkMenuItem *item = manage(new BacklinkMenuItem(note, get_note()->get_title()));
items.push_back(item);
}
diff --git a/src/note.cpp b/src/note.cpp
index 41ad974..868c7d0 100644
--- a/src/note.cpp
+++ b/src/note.cpp
@@ -671,20 +671,9 @@ namespace gnote {
void Note::process_rename_link_update(const std::string & old_title)
{
- Note::List linking_notes;
- const Note::List & manager_notes = m_manager.get_notes();
+ Note::List linking_notes = m_manager.get_notes_linking_to(old_title);
const Note::Ptr self = shared_from_this();
- for (Note::List::const_iterator iter = manager_notes.begin();
- manager_notes.end() != iter;
- iter++) {
- // Technically, containing text does not imply linking,
- // but this is less work
- const Note::Ptr note = *iter;
- if (note != self && note->contains_text(old_title))
- linking_notes.push_back(note);
- }
-
if (!linking_notes.empty()) {
Glib::RefPtr<Gio::Settings> settings =
Preferences::obj().get_schema_settings(Preferences::SCHEMA_GNOTE);
const NoteRenameBehavior behavior
diff --git a/src/notemanager.cpp b/src/notemanager.cpp
index 35b0874..0e9a063 100644
--- a/src/notemanager.cpp
+++ b/src/notemanager.cpp
@@ -796,6 +796,20 @@ namespace gnote {
return title;
}
+ Note::List NoteManager::get_notes_linking_to(const std::string & title) const
+ {
+ std::string tag = "<link:internal>" + utils::XmlEncoder::encode(title) + "</link:internal>";
+ Note::List result;
+ FOREACH(const Note::Ptr & note, m_notes) {
+ if(note->get_title() != title) {
+ if(note->get_complete_note_xml().find(tag) != std::string::npos) {
+ result.push_back(note);
+ }
+ }
+ }
+ return result;
+ }
+
TrieController::TrieController (NoteManager & manager)
: m_manager(manager)
diff --git a/src/notemanager.hpp b/src/notemanager.hpp
index fe298cf..ff2a15d 100644
--- a/src/notemanager.hpp
+++ b/src/notemanager.hpp
@@ -96,6 +96,7 @@ namespace gnote {
Note::Ptr get_or_create_template_note();
static std::string get_note_template_content(const std::string & title);
static std::string split_title_from_content (std::string title, std::string & body);
+ Note::List get_notes_linking_to(const std::string & title) const;
ChangedHandler signal_note_deleted;
ChangedHandler signal_note_added;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]