Skip to content

Commit 6094020

Browse files
committed
multi download
1 parent f3ad8bb commit 6094020

File tree

5 files changed

+35
-8
lines changed

5 files changed

+35
-8
lines changed

.claude/settings.local.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@
99
"Bash(cargo test:*)",
1010
"Bash(dir:*)",
1111
"Bash(ls:*)",
12-
"WebFetch(domain:r365mail.fit)"
12+
"WebFetch(domain:r365mail.fit)",
13+
"Bash(npx svelte-check:*)"
1314
]
1415
}
1516
}

src/model/error.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ pub enum Error {
5656
//RsRequest
5757
UnableToFormatHeaders,
5858
InvalidRsRequestStatus(RsRequestStatus),
59+
NeedFileSelection(RsRequest),
5960
RequestNeedsModelControllerForResolution(RsRequest),
6061
RequestNeedsLibraryIdForResolution(RsRequest),
6162

@@ -155,6 +156,11 @@ impl Error {
155156
ClientError::Custom { message: format!("Invalid id {} for {}", id, action) },
156157
),
157158

159+
Error::NeedFileSelection(_) => (
160+
StatusCode::CONFLICT,
161+
ClientError::Custom { message: "File selection required".to_string() },
162+
),
163+
158164
Error::ServiceError(_, _) => (
159165
StatusCode::INTERNAL_SERVER_ERROR,
160166
ClientError::SERVICE_ERROR,

src/model/medias.rs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1851,14 +1851,19 @@ impl ModelController {
18511851
self.plugin_manager.fill_infos(&mut request).await;
18521852

18531853
let mut infos: MediaForUpdate = request.clone().into();
1854-
infos.origin = origin.clone();
1854+
infos.origin = origin.clone().or_else(|| Some(RsLink {
1855+
platform: "link".to_owned(),
1856+
kind: Some(RsLinkType::Post),
1857+
id: request.url.clone(),
1858+
..Default::default()
1859+
}));
18551860

18561861
let tx_progress =
18571862
self.create_progress_sender(library_id.to_owned(), Some(upload_id.clone()));
18581863

18591864
// Check for origin duplicate
18601865
if let Some(origin) = &mut infos.origin {
1861-
let origin_filename = filename_from_path(&request.url);
1866+
let origin_filename = request.selected_file.clone().or_else(|| filename_from_path(&request.url));
18621867
self.check_origin_duplicate(
18631868
store,
18641869
origin,

src/plugins/sources/mod.rs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -308,11 +308,14 @@ impl SourceRead {
308308

309309

310310

311+
},
312+
RsRequestStatus::NeedFileSelection => {
313+
Err(Error::NeedFileSelection(request).into())
311314
},
312315
_ => Err(Error::InvalidRsRequestStatus(request.status).into())
313316
}
314317

315-
318+
316319
},
317320
}
318321
}
@@ -394,10 +397,13 @@ impl SourceRead {
394397
let body = Body::empty();
395398
Ok((status, headers, body).into_response())
396399
},
400+
RsRequestStatus::NeedFileSelection => {
401+
Err(Error::NeedFileSelection(request).into())
402+
},
397403
_ => Err(Error::InvalidRsRequestStatus(request.status).into())
398404
}
399405

400-
406+
401407
},
402408
}
403409
}

src/routes/medias.rs

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -615,10 +615,19 @@ async fn handler_download(
615615

616616
Ok(Json(json!({"downloading": true})))
617617
} else {
618-
let body = mc
618+
match mc
619619
.download_library_url(&library_id, download, &user)
620-
.await?;
621-
Ok(Json(json!(body)))
620+
.await
621+
{
622+
Ok(body) => Ok(Json(json!(body))),
623+
Err(crate::Error::Model(crate::model::error::Error::NeedFileSelection(request))) => {
624+
Ok(Json(json!({
625+
"needFileSelection": true,
626+
"request": request
627+
})))
628+
}
629+
Err(e) => Err(e),
630+
}
622631
}
623632
}
624633

0 commit comments

Comments
 (0)