void NoteDirectoryWatcherApplicationAddin::delete_note(const Glib::ustring & note_id) { DBG_OUT("NoteDirectoryWatcher: deleting %s because file deleted.", note_id.c_str()); Glib::ustring note_uri = make_uri(note_id); gnote::NoteBase::Ptr note_to_delete = note_manager().find_by_uri(note_uri); if(note_to_delete != 0) { note_manager().delete_note(note_to_delete); } else { DBG_OUT("notedirectorywatcher: did not delete %s because note not found.", note_id.c_str()); } }
void NotebookApplicationAddin::initialize () { IActionManager & am(IActionManager::obj()); NoteManager & nm(note_manager()); for(const NoteBase::Ptr & note : nm.get_notes()) { note->signal_tag_added.connect( sigc::mem_fun(*this, &NotebookApplicationAddin::on_tag_added)); note->signal_tag_removed.connect( sigc::mem_fun(*this, &NotebookApplicationAddin::on_tag_removed)); } nm.signal_note_added.connect( sigc::mem_fun(*this, &NotebookApplicationAddin::on_note_added)); nm.signal_note_deleted.connect( sigc::mem_fun(*this, &NotebookApplicationAddin::on_note_deleted)); am.add_app_action("new-notebook"); am.get_app_action("new-notebook")->signal_activate().connect( sigc::mem_fun(*this, &NotebookApplicationAddin::on_new_notebook_action)); am.add_app_menu_item(APP_SECTION_NEW, 300, _("New Note_book..."), "app.new-notebook"); m_initialized = true; }
void NoteDirectoryWatcherApplicationAddin::initialize() { gnote::NoteManager & manager(note_manager()); const Glib::ustring & note_path = manager.notes_dir(); m_signal_note_saved_cid = manager.signal_note_saved .connect(sigc::mem_fun(*this, &NoteDirectoryWatcherApplicationAddin::handle_note_saved)); Glib::RefPtr<Gio::File> file = Gio::File::create_for_path(note_path); m_file_system_watcher = file->monitor_directory(); m_signal_changed_cid = m_file_system_watcher->signal_changed() .connect(sigc::mem_fun(*this, &NoteDirectoryWatcherApplicationAddin::handle_file_system_change_event)); Glib::RefPtr<Gio::Settings> settings = gnote::Preferences::obj().get_schema_settings(SCHEMA_NOTE_DIRECTORY_WATCHER); m_check_interval = settings->get_int(CHECK_INTERVAL); sanitize_check_interval(settings); m_signal_settings_changed_cid = settings->signal_changed() .connect(sigc::mem_fun(*this, &NoteDirectoryWatcherApplicationAddin::on_settings_changed)); m_initialized = true; }
void NoteDirectoryWatcherApplicationAddin::add_or_update_note(const Glib::ustring & note_id) { const Glib::ustring & note_path = Glib::build_filename(note_manager().notes_dir(), note_id + ".note"); if (!sharp::file_exists(note_path)) { DBG_OUT("NoteDirectoryWatcher: Not processing update of %s because file does not exist.", note_path.c_str()); return; } Glib::ustring noteXml; try { noteXml = sharp::file_read_all_text(note_path); } catch(sharp::Exception & e) { /* TRANSLATORS: first %s is file name, second is error */ ERR_OUT(_("NoteDirectoryWatcher: Update aborted, error reading %s: %s"), note_path.c_str(), e.what()); return; } if(noteXml == "") { DBG_OUT("NoteDirectoryWatcher: Update aborted, %s had no contents.", note_path.c_str()); return; } Glib::ustring note_uri = make_uri(note_id); gnote::NoteBase::Ptr note = note_manager().find_by_uri(note_uri); bool is_new_note = false; if(note == 0) { is_new_note = true; DBG_OUT("NoteDirectoryWatcher: Adding %s because file changed.", note_id.c_str()); Glib::ustring title; Glib::RefPtr<Glib::Regex> regex = Glib::Regex::create("<title>([^<]+)</title>", Glib::REGEX_MULTILINE); Glib::MatchInfo match_info; if(regex->match(noteXml, match_info)) { title = match_info.fetch(1); } else { /* TRANSLATORS: %s is file */ ERR_OUT(_("NoteDirectoryWatcher: Error reading note title from %s"), note_path.c_str()); return; } try { note = note_manager().create_with_guid(title, note_id); if(note == 0) { /* TRANSLATORS: %s is file */ ERR_OUT(_("NoteDirectoryWatcher: Unknown error creating note from %s"), note_path.c_str()); return; } } catch(std::exception & e) { /* TRANSLATORS: first %s is file, second is error */ ERR_OUT(_("NoteDirectoryWatcher: Error creating note from %s: %s"), note_path.c_str(), e.what()); return; } } if(is_new_note) { DBG_OUT("NoteDirectoryWatcher: Updating %s because file changed.", note_id.c_str()); } try { note->load_foreign_note_xml(noteXml, gnote::CONTENT_CHANGED); } catch(std::exception & e) { /* TRANSLATORS: first %s is file, second is error */ ERR_OUT(_("NoteDirectoryWatcher: Update aborted, error parsing %s: %s"), note_path.c_str(), e.what()); if(is_new_note) { note_manager().delete_note(note); } } }