+
+ #[action]
+ pub fn note_rename(&mut self, event: &mut ActionEvent) {
+ let Some(doc) = self.doc.get_doc() else {
+ return;
+ };
+ let Some(obj) = &event.obj else {
+ return;
+ };
+ let NoteId::Id(note_id) = self.id else {
+ return;
+ };
+
+ let nodename = match &self.nodename {
+ Some(name) => name.as_str(),
+ None => "",
+ };
+
+ let proxy = doc.doc_proxy();
+ let collection_id = self.collection_id;
+ let backend = self.backend.clone();
+
+ obj.dialog()
+ .title("Rename Note")
+ .content("File Name")
+ .input(true)
+ .input_value(nodename)
+ .button1_label("OK")
+ .closebutton_label("Cancel")
+ .result(move |event|{
+ if let EventType::String(new_name) = &event.event_type && event.intval == 1 {
+ // Rename OK
+ // check if the new nodename is available
+ let new_nodename = new_name.clone();
+ backend.check_nodename(collection_id, note_id, new_name.as_str(), move|result|{
+ proxy.call_mainthread(move|doc, note| {
+ match result {
+ Ok(available) => {
+ if available {
+ let proxy = doc.doc_proxy();
+ note.backend.rename_note(1, Some(new_nodename.clone()), None, |result|{
+ proxy.call_mainthread(|_doc, note|{
+ match result {
+ Ok(updated) => {
+ if updated.rows_affected != 1 {
+ eprintln!("rename_note: unexpected number of rows affected");
+ } else {
+ note.nodename = Some(new_nodename);
+ note.fixed_title = true;
+ }
+ },
+ Err(e) => {
+ eprintln!("note update failed: {:?}", e);
+ }
+ }
+ });
+ });
+ } else {
+ let msg = format!("File {} already exists", new_nodename);
+ dialog!(title = "Rename Note", content = msg.as_str(), button1_label = "OK");
+ }
+ }
+ Err(e) => {
+ eprintln!("check_nodename failed: {:?}", e);
+ }
+ }
+ });
+ });
+ }
+ })
+ .create();
+ }