From 8062db86d792f69f3627df114c505346e1ab1391 Mon Sep 17 00:00:00 2001 From: lifegpc Date: Tue, 14 Jun 2022 02:28:00 +0000 Subject: [PATCH] Impl Send for UgoiraError2 --- src/download.rs | 12 ++---------- src/ugoira.rs | 18 ++++++++++++++++++ ugoira/src/ugoira.c | 10 ++++++++++ ugoira/ugoira.h | 1 + 4 files changed, 31 insertions(+), 10 deletions(-) diff --git a/src/download.rs b/src/download.rs index 224fdb5..01457f4 100644 --- a/src/download.rs +++ b/src/download.rs @@ -7,7 +7,6 @@ use crate::data::json::JSONDataFile; #[cfg(feature = "ugoira")] use crate::data::video::get_video_metadata; use crate::downloader::Downloader; -use crate::downloader::DownloaderError; use crate::downloader::DownloaderResult; use crate::downloader::LocalFile; use crate::error::PixivDownloaderError; @@ -72,7 +71,7 @@ impl Main { /// * `progress_bars` - Multiple progress bars /// * `datas` - The artwork's data /// * `base` - The directory of the target - pub async fn download_artwork_link(link: L, np: u16, progress_bars: Option>, datas: Arc, base: Arc) -> Result<(), DownloaderError> { + pub async fn download_artwork_link(link: L, np: u16, progress_bars: Option>, datas: Arc, base: Arc) -> Result<(), PixivDownloaderError> { let file_name = get_file_name_from_url(link.clone()).try_err(format!("{} {}", gettext("Failed to get file name from url:"), link.as_str()))?; let file_name = base.join(file_name); let helper = get_helper(); @@ -239,14 +238,7 @@ impl Main { for task in tasks { let r = spin_on(task); let r = match r { - Ok(r) => { - match r { - Ok(o) => { Ok(o) } - Err(e) => { - Err(PixivDownloaderError::from(e)) - } - } - } + Ok(r) => { r } Err(e) => { Err(PixivDownloaderError::from(e)) } diff --git a/src/ugoira.rs b/src/ugoira.rs index 3c24815..18e0f28 100644 --- a/src/ugoira.rs +++ b/src/ugoira.rs @@ -246,6 +246,8 @@ impl PartialEq for UgoiraZipError2 { } } +unsafe impl Send for UgoiraZipError2 {} + impl ToRawHandle<_ugoira::zip_error_t> for UgoiraZipError2 { unsafe fn to_raw_handle(&self) -> *mut _ugoira::zip_error_t { self.err @@ -362,6 +364,22 @@ pub fn convert_ugoira_to_mp4 + ?Sized, D: AsRef + ?Sized, Ok(()) } +#[cfg(test)] +async fn get_ugoira_zip_error2() -> UgoiraZipError2 { + let ugo = unsafe { _ugoira::new_ugoira_error() }; + if ugo.is_null() { + panic!("Out of memory."); + } + UgoiraZipError2 { err: ugo } +} + +#[tokio::test] +async fn test_ugoira_zip_error2() { + let task = tokio::spawn(get_ugoira_zip_error2()); + let re = task.await.unwrap(); + assert!(re.to_str().is_ok()) +} + #[test] fn test_ugoira_frames() { let mut f = UgoiraFrames::new(); diff --git a/ugoira/src/ugoira.c b/ugoira/src/ugoira.c index a184471..a5313de 100644 --- a/ugoira/src/ugoira.c +++ b/ugoira/src/ugoira.c @@ -489,6 +489,16 @@ void ugoira_mfree(void* data) { if (data) free(data); } +zip_error_t* new_ugoira_error() { + zip_error_t* err = malloc(sizeof(zip_error_t)); + if (!err) { + return NULL; + } + memset(err, 0, sizeof(zip_error_t)); + zip_error_init(err); + return err; +} + void free_ugoira_error(zip_error_t* zip_err) { if (!zip_err) return; zip_error_fini(zip_err); diff --git a/ugoira/ugoira.h b/ugoira/ugoira.h index f99d10a..8eca385 100644 --- a/ugoira/ugoira.h +++ b/ugoira/ugoira.h @@ -41,6 +41,7 @@ void free_ugoira_frames(UgoiraFrame* frames); UgoiraError convert_ugoira_to_mp4(const char* src, const char* dest, const UgoiraFrame* frames, float max_fps, const AVDictionary* opts, const AVDictionary* metadata); char* ugoira_get_zip_err_msg(int code); void ugoira_mfree(void* data); +zip_error_t* new_ugoira_error(); void free_ugoira_error(zip_error_t* zip_err); char* ugoira_get_zip_err2_msg(zip_error_t* zip_err2); #endif