Move handle_upload_result to upload::receive module

xmppftw@kl.netlib.re created

Change summary

xmpp/src/iq/mod.rs         |  3 +
xmpp/src/upload/mod.rs     | 60 ------------------------------------
xmpp/src/upload/receive.rs | 65 ++++++++++++++++++++++++++++++++++++++++
3 files changed, 68 insertions(+), 60 deletions(-)

Detailed changes

xmpp/src/iq/mod.rs 🔗

@@ -71,7 +71,8 @@ pub async fn handle_iq(agent: &mut Agent, iq: Iq) -> Vec<Event> {
             let new_events = pubsub::handle_iq_result(&from, payload);
             events.extend(new_events);
         } else if payload.is("slot", ns::HTTP_UPLOAD) {
-            let new_events = upload::handle_upload_result(&from, iq.id, payload, agent).await;
+            let new_events =
+                upload::receive::handle_upload_result(&from, iq.id, payload, agent).await;
             events.extend(new_events);
         } else if payload.is("query", ns::PRIVATE) {
             match PrivateXMLQuery::try_from(payload) {

xmpp/src/upload/mod.rs 🔗

@@ -4,62 +4,4 @@
 // License, v. 2.0. If a copy of the MPL was not distributed with this
 // file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
-use reqwest::{
-    header::HeaderMap as ReqwestHeaderMap, Body as ReqwestBody, Client as ReqwestClient,
-};
-use std::path::PathBuf;
-use tokio::fs::File;
-use tokio_util::codec::{BytesCodec, FramedRead};
-use tokio_xmpp::{
-    parsers::http_upload::{Header as HttpUploadHeader, SlotResult},
-    Element, Jid,
-};
-
-use crate::{Agent, Event};
-
-pub async fn handle_upload_result(
-    from: &Jid,
-    iqid: String,
-    elem: Element,
-    agent: &mut Agent,
-) -> impl IntoIterator<Item = Event> {
-    let mut res: Option<(usize, PathBuf)> = None;
-
-    for (i, (id, to, filepath)) in agent.uploads.iter().enumerate() {
-        if to == from && id == &iqid {
-            res = Some((i, filepath.to_path_buf()));
-            break;
-        }
-    }
-
-    if let Some((index, file)) = res {
-        agent.uploads.remove(index);
-        let slot = SlotResult::try_from(elem).unwrap();
-
-        let mut headers = ReqwestHeaderMap::new();
-        for header in slot.put.headers {
-            let (attr, val) = match header {
-                HttpUploadHeader::Authorization(val) => ("Authorization", val),
-                HttpUploadHeader::Cookie(val) => ("Cookie", val),
-                HttpUploadHeader::Expires(val) => ("Expires", val),
-            };
-            headers.insert(attr, val.parse().unwrap());
-        }
-
-        let web = ReqwestClient::new();
-        let stream = FramedRead::new(File::open(file).await.unwrap(), BytesCodec::new());
-        let body = ReqwestBody::wrap_stream(stream);
-        let res = web
-            .put(slot.put.url.as_str())
-            .headers(headers)
-            .body(body)
-            .send()
-            .await
-            .unwrap();
-        if res.status() == 201 {
-            return vec![Event::HttpUploadedFile(slot.get.url)];
-        }
-    }
-
-    return vec![];
-}
+pub mod receive;

xmpp/src/upload/receive.rs 🔗

@@ -0,0 +1,65 @@
+// Copyright (c) 2023 xmpp-rs contributors.
+//
+// This Source Code Form is subject to the terms of the Mozilla Public
+// License, v. 2.0. If a copy of the MPL was not distributed with this
+// file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+use reqwest::{
+    header::HeaderMap as ReqwestHeaderMap, Body as ReqwestBody, Client as ReqwestClient,
+};
+use std::path::PathBuf;
+use tokio::fs::File;
+use tokio_util::codec::{BytesCodec, FramedRead};
+use tokio_xmpp::{
+    parsers::http_upload::{Header as HttpUploadHeader, SlotResult},
+    Element, Jid,
+};
+
+use crate::{Agent, Event};
+
+pub async fn handle_upload_result(
+    from: &Jid,
+    iqid: String,
+    elem: Element,
+    agent: &mut Agent,
+) -> impl IntoIterator<Item = Event> {
+    let mut res: Option<(usize, PathBuf)> = None;
+
+    for (i, (id, to, filepath)) in agent.uploads.iter().enumerate() {
+        if to == from && id == &iqid {
+            res = Some((i, filepath.to_path_buf()));
+            break;
+        }
+    }
+
+    if let Some((index, file)) = res {
+        agent.uploads.remove(index);
+        let slot = SlotResult::try_from(elem).unwrap();
+
+        let mut headers = ReqwestHeaderMap::new();
+        for header in slot.put.headers {
+            let (attr, val) = match header {
+                HttpUploadHeader::Authorization(val) => ("Authorization", val),
+                HttpUploadHeader::Cookie(val) => ("Cookie", val),
+                HttpUploadHeader::Expires(val) => ("Expires", val),
+            };
+            headers.insert(attr, val.parse().unwrap());
+        }
+
+        let web = ReqwestClient::new();
+        let stream = FramedRead::new(File::open(file).await.unwrap(), BytesCodec::new());
+        let body = ReqwestBody::wrap_stream(stream);
+        let res = web
+            .put(slot.put.url.as_str())
+            .headers(headers)
+            .body(body)
+            .send()
+            .await
+            .unwrap();
+        if res.status() == 201 {
+            return vec![Event::HttpUploadedFile(slot.get.url)];
+        }
+    }
+
+    return vec![];
+}