From 903acc884594c15cc54e005c84cf266c28c71317 Mon Sep 17 00:00:00 2001 From: trivernis Date: Sun, 27 Feb 2022 15:48:40 +0100 Subject: [PATCH] Change tag import wrapper to use service identifiers instead of names Signed-off-by: trivernis --- README.md | 9 +++++---- src/lib.rs | 11 ++++++----- src/wrapper/builders/import_builder.rs | 16 ++++++---------- src/wrapper/hydrus_file.rs | 1 + tests/wrapper/test_import.rs | 7 +++++-- tests/wrapper/test_url.rs | 5 ++++- 6 files changed, 27 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index 9c91fe6..f6a3c02 100644 --- a/README.md +++ b/README.md @@ -49,13 +49,13 @@ async fn main() { .run().await.unwrap(); for mut file in files { - file.add_tags(ServiceName::my_tags(), vec![Tag::from("ark mage")]).await.unwrap(); + file.add_tags(ServiceName::my_tags().into(), vec![Tag::from("ark mage")]).await.unwrap(); } let url = hydrus.import() .url("https://www.pixiv.net/member_illust.php?illust_id=83406361&mode=medium") .page(PageIdentifier::name("My Import Page")) - .add_additional_tag(ServiceName::my_tags(), Tag::from("character:megumin")) + .add_additional_tag(ServiceName::my_tags().into(), Tag::from("character:megumin")) .show_page(true) .run().await.unwrap(); } @@ -67,6 +67,7 @@ async fn main() { use hydrus_api::Client; use hydrus_api::paths::adding_tags::{AddTagsRequestBuilder, TagAction}; use std::env; +use hydrus_api::api_core::common::ServiceIdentifier; #[tokio::main] async fn main() { @@ -81,9 +82,9 @@ async fn main() { let request = AddTagsRequestBuilder::default() .add_hash(hash) // for each tag the service has to be specified - .add_tags("my tags", vec!["beach".into(), "summer".into()]) + .add_tags(ServiceIdentifier::name("my tags"), vec!["beach".into(), "summer".into()]) // with tag actions tags can also be removed. It's especially useful for the PTR - .add_tag_with_action("my tags", "rain", TagAction::DeleteFromLocalService) + .add_tag_with_action(ServiceIdentifier::name("my tags"), "rain", TagAction::DeleteFromLocalService) .build(); client.add_tags(request).await.unwrap(); diff --git a/src/lib.rs b/src/lib.rs index 3732cf0..4abc643 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -6,7 +6,7 @@ //! ## Hydrus Usage Example //! //! ``` -//! # use hydrus_api::{Hydrus, Client}; +//! use hydrus_api::{Hydrus, Client}; //! use std::env; //! use hydrus_api::wrapper::tag::Tag; //! use hydrus_api::wrapper::service::ServiceName; @@ -37,13 +37,13 @@ //! .run().await.unwrap(); //! //! for mut file in files { -//! file.add_tags(ServiceName::my_tags(), vec![Tag::from("ark mage")]).await.unwrap(); +//! file.add_tags(ServiceName::my_tags().into(), vec![Tag::from("ark mage")]).await.unwrap(); //! } //! //! let url = hydrus.import() //! .url("https://www.pixiv.net/member_illust.php?illust_id=83406361&mode=medium") //! .page(PageIdentifier::name("My Import Page")) -//! .add_additional_tag(ServiceName::my_tags(), Tag::from("character:megumin")) +//! .add_additional_tag(ServiceName::my_tags().into(), Tag::from("character:megumin")) //! .show_page(true) //! .run().await.unwrap(); //! # } @@ -54,6 +54,7 @@ //! use hydrus_api::Client; //! use hydrus_api::api_core::adding_tags::{AddTagsRequestBuilder, TagAction}; //! use std::env; +//! use hydrus_api::api_core::common::ServiceIdentifier; //! # #[tokio::test] //! # async fn doctest() { //! @@ -68,9 +69,9 @@ //! let request = AddTagsRequestBuilder::default() //! .add_hash(hash) //! // for each tag the service has to be specified -//! .add_tags("my tags", vec!["beach".into(), "summer".into()]) +//! .add_tags(ServiceIdentifier::name("my tags"), vec!["beach".into(), "summer".into()]) //! // with tag actions tags can also be removed. It's especially useful for the PTR -//! .add_tag_with_action("my tags", "rain", TagAction::DeleteFromLocalService) +//! .add_tag_with_action(ServiceIdentifier::name("my tags"), "rain", TagAction::DeleteFromLocalService) //! .build(); //! //! client.add_tags(request).await.unwrap(); diff --git a/src/wrapper/builders/import_builder.rs b/src/wrapper/builders/import_builder.rs index a99b2aa..c8969e8 100644 --- a/src/wrapper/builders/import_builder.rs +++ b/src/wrapper/builders/import_builder.rs @@ -5,7 +5,6 @@ use crate::error::{Error, Result}; use crate::utils::tag_list_to_string_list; use crate::wrapper::hydrus_file::HydrusFile; use crate::wrapper::page::PageIdentifier; -use crate::wrapper::service::ServiceName; use crate::wrapper::tag::Tag; use crate::wrapper::url::Url; use crate::Client; @@ -78,7 +77,7 @@ pub struct UrlImportBuilder { page: Option, show_page: bool, filter_tags: Vec, - service_tag_mappings: HashMap>, + service_tag_mappings: HashMap>, } impl UrlImportBuilder { @@ -122,16 +121,16 @@ impl UrlImportBuilder { } /// Adds an additional tag for the imported file - pub fn add_additional_tag(self, service: ServiceName, tag: Tag) -> Self { + pub fn add_additional_tag(self, service: ServiceIdentifier, tag: Tag) -> Self { self.add_additional_tags(service, vec![tag]) } /// Adds multiple additional tags for the import - pub fn add_additional_tags(mut self, service: ServiceName, mut tags: Vec) -> Self { - if let Some(service_tags) = self.service_tag_mappings.get_mut(&service.0) { + pub fn add_additional_tags(mut self, service: ServiceIdentifier, mut tags: Vec) -> Self { + if let Some(service_tags) = self.service_tag_mappings.get_mut(&service) { service_tags.append(&mut tags); } else { - self.service_tag_mappings.insert(service.0, tags); + self.service_tag_mappings.insert(service, tags); } self @@ -142,10 +141,7 @@ impl UrlImportBuilder { let mut request = AddUrlRequestBuilder::default().url(&self.url); for (service, tags) in self.service_tag_mappings { - request = request.add_tags( - ServiceIdentifier::name(service), - tag_list_to_string_list(tags), - ); + request = request.add_tags(service, tag_list_to_string_list(tags)); } request = request.add_filter_tags(tag_list_to_string_list(self.filter_tags)); if let Some(page) = self.page { diff --git a/src/wrapper/hydrus_file.rs b/src/wrapper/hydrus_file.rs index 1021ab6..60c5cb8 100644 --- a/src/wrapper/hydrus_file.rs +++ b/src/wrapper/hydrus_file.rs @@ -212,6 +212,7 @@ impl HydrusFile { Ok(naive_time_imported) } + /// Returns the time the file was deleted for a specified file service pub async fn time_deleted>( &mut self, service_key: S, diff --git a/tests/wrapper/test_import.rs b/tests/wrapper/test_import.rs index 21a988e..2091783 100644 --- a/tests/wrapper/test_import.rs +++ b/tests/wrapper/test_import.rs @@ -39,8 +39,11 @@ async fn it_imports_urls() { .url("https://www.pixiv.net/member_illust.php?illust_id=83406361&mode=medium") .page(PageIdentifier::name("Rusty Import")) .show_page(true) - .add_additional_tag(ServiceName::my_tags(), Tag::from("ark mage")) - .add_additional_tag(ServiceName::my_tags(), Tag::from("character:megumin")) + .add_additional_tag(ServiceName::my_tags().into(), Tag::from("ark mage")) + .add_additional_tag( + ServiceName::my_tags().into(), + Tag::from("character:megumin"), + ) .run() .await .unwrap(); diff --git a/tests/wrapper/test_url.rs b/tests/wrapper/test_url.rs index 700bad5..87ecb23 100644 --- a/tests/wrapper/test_url.rs +++ b/tests/wrapper/test_url.rs @@ -18,7 +18,10 @@ async fn it_imports() { url.import() .page(PageIdentifier::name("Rusty Import")) - .add_additional_tag(ServiceName::my_tags(), Tag::from("character:megumin")) + .add_additional_tag( + ServiceName::my_tags().into(), + Tag::from("character:megumin"), + ) .run() .await .unwrap();