From 97f4232db72dd519617b542d47bb5f0e4dd6817a Mon Sep 17 00:00:00 2001 From: "xmppftw@kl.netlib.re" Date: Fri, 29 Dec 2023 23:23:25 +0100 Subject: [PATCH] Move handle_upload_result to upload::receive module --- 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(-) create mode 100644 xmpp/src/upload/receive.rs diff --git a/xmpp/src/iq/mod.rs b/xmpp/src/iq/mod.rs index 66fbd9d8..32d80072 100644 --- a/xmpp/src/iq/mod.rs +++ b/xmpp/src/iq/mod.rs @@ -71,7 +71,8 @@ pub async fn handle_iq(agent: &mut Agent, iq: Iq) -> Vec { 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) { diff --git a/xmpp/src/upload/mod.rs b/xmpp/src/upload/mod.rs index f90af993..ce689d6d 100644 --- a/xmpp/src/upload/mod.rs +++ b/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 { - 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; diff --git a/xmpp/src/upload/receive.rs b/xmpp/src/upload/receive.rs new file mode 100644 index 00000000..f90af993 --- /dev/null +++ b/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 { + 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![]; +}