feat(trello): add command 'trello attachement get'
This commit is contained in:
parent
e7e897db72
commit
e05950e09c
5 changed files with 143 additions and 13 deletions
|
@ -72,7 +72,7 @@ As part of building the import server, the following commands exercise each oper
|
|||
- [x] trello board get - includes list of stacks
|
||||
- [x] trello stack get - includes list of cards
|
||||
- [x] trello card get - includes list of attachments
|
||||
- [ ] trello attachment get
|
||||
- [x] trello attachment get - includes download url
|
||||
- [ ] nextcloud deck get (was board list)
|
||||
- [ ] nextcloud board get (was stack list)
|
||||
- [ ] nextcloud stack get (was card list)
|
||||
|
|
78
src/tests/responses/trello-attachment-get.json
Normal file
78
src/tests/responses/trello-attachment-get.json
Normal file
|
@ -0,0 +1,78 @@
|
|||
{
|
||||
"id": "65ad94875aed24f70ecdd037",
|
||||
"bytes": 184198,
|
||||
"date": "2019-01-02T22:47:17.325Z",
|
||||
"edgeColor": "#047cbc",
|
||||
"idMember": "65ad94875aed24f70ecdd038",
|
||||
"isUpload": true,
|
||||
"mimeType": null,
|
||||
"name": "Backlog.png",
|
||||
"previews": [
|
||||
{
|
||||
"id": "65ad94875aed24f70ecdd039",
|
||||
"_id": "65ad94875aed24f70ecdd039",
|
||||
"scaled": false,
|
||||
"url": "https://trello.com/1/cards/65ad94865aed24f70ecdcebb/attachments/65ad94875aed24f70ecdd037/previews/65ad94875aed24f70ecdd039/download/Backlog.png",
|
||||
"bytes": 1064,
|
||||
"height": 50,
|
||||
"width": 70
|
||||
},
|
||||
{
|
||||
"id": "65ad94875aed24f70ecdd03a",
|
||||
"_id": "65ad94875aed24f70ecdd03a",
|
||||
"scaled": false,
|
||||
"url": "https://trello.com/1/cards/65ad94865aed24f70ecdcebb/attachments/65ad94875aed24f70ecdd037/previews/65ad94875aed24f70ecdd03a/download/Backlog.png",
|
||||
"bytes": 4859,
|
||||
"height": 150,
|
||||
"width": 250
|
||||
},
|
||||
{
|
||||
"id": "65ad94875aed24f70ecdd03b",
|
||||
"_id": "65ad94875aed24f70ecdd03b",
|
||||
"scaled": true,
|
||||
"url": "https://trello.com/1/cards/65ad94865aed24f70ecdcebb/attachments/65ad94875aed24f70ecdd037/previews/65ad94875aed24f70ecdd03b/download/Backlog.png",
|
||||
"bytes": 2721,
|
||||
"height": 66,
|
||||
"width": 150
|
||||
},
|
||||
{
|
||||
"id": "65ad94875aed24f70ecdd03c",
|
||||
"_id": "65ad94875aed24f70ecdd03c",
|
||||
"scaled": true,
|
||||
"url": "https://trello.com/1/cards/65ad94865aed24f70ecdcebb/attachments/65ad94875aed24f70ecdd037/previews/65ad94875aed24f70ecdd03c/download/Backlog.png",
|
||||
"bytes": 5874,
|
||||
"height": 132,
|
||||
"width": 300
|
||||
},
|
||||
{
|
||||
"id": "65ad94875aed24f70ecdd03d",
|
||||
"_id": "65ad94875aed24f70ecdd03d",
|
||||
"scaled": true,
|
||||
"url": "https://trello.com/1/cards/65ad94865aed24f70ecdcebb/attachments/65ad94875aed24f70ecdd037/previews/65ad94875aed24f70ecdd03d/download/Backlog.png",
|
||||
"bytes": 12946,
|
||||
"height": 264,
|
||||
"width": 600
|
||||
},
|
||||
{
|
||||
"id": "65ad94875aed24f70ecdd03e",
|
||||
"_id": "65ad94875aed24f70ecdd03e",
|
||||
"scaled": true,
|
||||
"url": "https://trello.com/1/cards/65ad94865aed24f70ecdcebb/attachments/65ad94875aed24f70ecdd037/previews/65ad94875aed24f70ecdd03e/download/Backlog.png",
|
||||
"bytes": 30062,
|
||||
"height": 527,
|
||||
"width": 1200
|
||||
},
|
||||
{
|
||||
"id": "65ad94875aed24f70ecdd03f",
|
||||
"_id": "65ad94875aed24f70ecdd03f",
|
||||
"scaled": true,
|
||||
"url": "https://trello.com/1/cards/65ad94865aed24f70ecdcebb/attachments/65ad94875aed24f70ecdd037/previews/65ad94875aed24f70ecdd03f/download/Backlog.png",
|
||||
"bytes": 184198,
|
||||
"height": 3558,
|
||||
"width": 8100
|
||||
}
|
||||
],
|
||||
"url": "https://trello.com/1/cards/65ad94865aed24f70ecdcebb/attachments/65ad94875aed24f70ecdd037/download/Backlog.png",
|
||||
"pos": 49152,
|
||||
"fileName": "Backlog.png"
|
||||
}
|
45
src/trello/attachment.rs
Normal file
45
src/trello/attachment.rs
Normal file
|
@ -0,0 +1,45 @@
|
|||
//
|
||||
use clap::Parser;
|
||||
use color_eyre::Result;
|
||||
|
||||
use crate::{execute::Execute, p, FullCtx};
|
||||
|
||||
use super::model::{TrelloAttachmentId, TrelloCardId};
|
||||
|
||||
#[derive(Parser, Debug)]
|
||||
pub(crate) enum TrelloAttachmentCommand {
|
||||
Get {
|
||||
#[clap(long, action = clap::ArgAction::SetTrue)]
|
||||
dump: bool,
|
||||
|
||||
card_id: String,
|
||||
attachment_id: String,
|
||||
},
|
||||
}
|
||||
|
||||
impl Execute for TrelloAttachmentCommand {
|
||||
async fn execute(self, ctx: FullCtx) -> Result<()> {
|
||||
match self {
|
||||
Self::Get {
|
||||
dump,
|
||||
card_id,
|
||||
attachment_id,
|
||||
} => {
|
||||
let api_result = ctx
|
||||
.trello_client()
|
||||
.card_attachment(
|
||||
&TrelloCardId::new(card_id),
|
||||
&TrelloAttachmentId::new(attachment_id),
|
||||
)
|
||||
.await;
|
||||
if dump {
|
||||
p!(ctx.prt, "{}", api_result.text);
|
||||
} else {
|
||||
let attachment = api_result.result?;
|
||||
p!(ctx.prt, "{}:{}", attachment.name, attachment.url);
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -3,6 +3,7 @@ use std::collections::HashMap;
|
|||
|
||||
use kxio::net::{Net, ReqBuilder};
|
||||
|
||||
use crate::trello::model::{TrelloAttachment, TrelloAttachmentId};
|
||||
use crate::{
|
||||
api_result::APIResult,
|
||||
f, s,
|
||||
|
@ -84,18 +85,18 @@ impl<'ctx> TrelloClient<'ctx> {
|
|||
.await
|
||||
}
|
||||
|
||||
// // https://developer.atlassian.com/cloud/trello/rest/api-group-cards/#api-cards-id-attachments-idattachment-get
|
||||
// pub(crate) async fn card_attachment(
|
||||
// &self,
|
||||
// card_id: &TrelloCardId,
|
||||
// attachment_id: &TrelloAttachmentId,
|
||||
// ) -> APIResult<TrelloAttachment> {
|
||||
// self.request(
|
||||
// f!("/cards/{card_id}/attachments/{attachment_id}"),
|
||||
// |net, url| net.get(url),
|
||||
// )
|
||||
// .await
|
||||
// }
|
||||
// https://developer.atlassian.com/cloud/trello/rest/api-group-cards/#api-cards-id-attachments-idattachment-get
|
||||
pub(crate) async fn card_attachment(
|
||||
&self,
|
||||
card_id: &TrelloCardId,
|
||||
attachment_id: &TrelloAttachmentId,
|
||||
) -> APIResult<TrelloAttachment> {
|
||||
self.request(
|
||||
f!("/cards/{card_id}/attachments/{attachment_id}"),
|
||||
|net, url| net.get(url),
|
||||
)
|
||||
.await
|
||||
}
|
||||
}
|
||||
|
||||
impl TrelloClient<'_> {
|
||||
|
|
|
@ -5,6 +5,7 @@ use crate::{
|
|||
execute::Execute,
|
||||
f,
|
||||
trello::{
|
||||
attachment::TrelloAttachmentCommand,
|
||||
board::TrelloBoardCommand,
|
||||
card::TrelloCardCommand,
|
||||
member::TrelloMemberCommand,
|
||||
|
@ -17,6 +18,7 @@ use crate::{
|
|||
FullCtx,
|
||||
};
|
||||
|
||||
pub(crate) mod attachment;
|
||||
pub(crate) mod board;
|
||||
pub(crate) mod boards;
|
||||
pub(crate) mod card;
|
||||
|
@ -47,6 +49,9 @@ pub(crate) enum TrelloCommand {
|
|||
|
||||
#[clap(subcommand)]
|
||||
Card(TrelloCardCommand),
|
||||
|
||||
#[clap(subcommand)]
|
||||
Attachment(TrelloAttachmentCommand),
|
||||
}
|
||||
|
||||
impl Execute for TrelloCommand {
|
||||
|
@ -56,6 +61,7 @@ impl Execute for TrelloCommand {
|
|||
Self::Board(cmd) => cmd.execute(ctx).await,
|
||||
Self::Stack(cmd) => cmd.execute(ctx).await,
|
||||
Self::Card(cmd) => cmd.execute(ctx).await,
|
||||
Self::Attachment(cmd) => cmd.execute(ctx).await,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue