소스 검색

[Telegram] Editing functional added

Slava Barinov 1 년 전
부모
커밋
8a86b1ac7c
1개의 변경된 파일21개의 추가작업 그리고 5개의 파일을 삭제
  1. 21 5
      src/telegram.rs

+ 21 - 5
src/telegram.rs

@@ -711,7 +711,7 @@ async fn callback_handler(q: CallbackQuery, bot: Bot, dialogue: QIFDialogue) ->
 
             // Process the selection, e.g., by updating the dialogue state or responding to the user
             let response_message = format!("Editing item {}", item_id);
-            if let Some(chat_id) = q.message.clone().and_then(|msg| Some(msg.chat.id)) {
+            if let Some(chat_id) = q.message.clone().map(|msg| msg.chat.id) {
                 bot.send_message(chat_id, response_message).await?;
             }
 
@@ -719,17 +719,33 @@ async fn callback_handler(q: CallbackQuery, bot: Bot, dialogue: QIFDialogue) ->
             if let Some(data) = state {
                 log::info!("State: {}", data);
                 if let State::Ready {
-                    filename: _,
-                    item_categories,
+                    filename,
+                    mut item_categories,
                 } = data
                 {
+                    let mut item_to_edit = None;
+                    let req_item: usize = item_id.parse().unwrap_or_default();
                     for (index, (key, value)) in item_categories.iter().enumerate() {
                         log::debug!("Index: {}, Key: {}, Value: {}", index, key, value);
-                        let req_item: usize = item_id.parse().unwrap_or_default();
                         if index == req_item {
                             log::info!("Editing item {}:{}", key, value);
+                            item_to_edit = Some(key.clone());
                         }
                     }
+
+                    if let Some(key) = item_to_edit {
+                        let value = item_categories.remove(&key).unwrap_or_default();
+                        dialogue
+                            .update(State::CategorySelect {
+                                filename,
+                                item: value,
+                                items_left: vec![],
+                                items_processed: item_categories,
+                            })
+                            .await?;
+                    } else {
+                        log::error!("Attempt to edit non-existent item");
+                    }
                 }
             }
         }
@@ -776,7 +792,7 @@ async fn callback_handler(q: CallbackQuery, bot: Bot, dialogue: QIFDialogue) ->
                                 .await?;
                             bot.send_message(
                                 chat.id,
-                                format!("Items are categorized and categories are updated"),
+                                "Items are categorized and categories are updated".to_string(),
                             )
                             .reply_markup(create_categories_keyboard(&items_processed))
                             .await?;