feat: basic support rss
This commit is contained in:
		
							parent
							
								
									cde3361458
								
							
						
					
					
						commit
						9fd3ae6563
					
				@ -500,31 +500,31 @@ async fn merge_mikan_classic_episodes_and_strip_columns() -> RecorderResult<()>
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    select_columns_and_write(merged_df.clone(), "tiny", &["fansub_name", "original_name"])?;
 | 
					    select_columns_and_write(merged_df.clone(), "tiny", &["fansub_name", "original_name"])?;
 | 
				
			||||||
    select_columns_and_write(
 | 
					    // select_columns_and_write(
 | 
				
			||||||
        merged_df.clone(),
 | 
					    //     merged_df.clone(),
 | 
				
			||||||
        "lite",
 | 
					    //     "lite",
 | 
				
			||||||
        &[
 | 
					    //     &[
 | 
				
			||||||
            "mikan_fansub_id",
 | 
					    //         "mikan_fansub_id",
 | 
				
			||||||
            "fansub_name",
 | 
					    //         "fansub_name",
 | 
				
			||||||
            "mikan_episode_id",
 | 
					    //         "mikan_episode_id",
 | 
				
			||||||
            "original_name",
 | 
					    //         "original_name",
 | 
				
			||||||
        ],
 | 
					    //     ],
 | 
				
			||||||
    )?;
 | 
					    // )?;
 | 
				
			||||||
    select_columns_and_write(
 | 
					    // select_columns_and_write(
 | 
				
			||||||
        merged_df,
 | 
					    //     merged_df,
 | 
				
			||||||
        "full",
 | 
					    //     "full",
 | 
				
			||||||
        &[
 | 
					    //     &[
 | 
				
			||||||
            "id",
 | 
					    //         "id",
 | 
				
			||||||
            "publish_at_timestamp",
 | 
					    //         "publish_at_timestamp",
 | 
				
			||||||
            "mikan_fansub_id",
 | 
					    //         "mikan_fansub_id",
 | 
				
			||||||
            "fansub_name",
 | 
					    //         "fansub_name",
 | 
				
			||||||
            "mikan_episode_id",
 | 
					    //         "mikan_episode_id",
 | 
				
			||||||
            "original_name",
 | 
					    //         "original_name",
 | 
				
			||||||
            "magnet_link",
 | 
					    //         "magnet_link",
 | 
				
			||||||
            "file_size",
 | 
					    //         "file_size",
 | 
				
			||||||
            "torrent_link",
 | 
					    //         "torrent_link",
 | 
				
			||||||
        ],
 | 
					    //     ],
 | 
				
			||||||
    )?;
 | 
					    // )?;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    Ok(())
 | 
					    Ok(())
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -53,14 +53,15 @@ impl App {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        let mut router = Router::<Arc<dyn AppContextTrait>>::new();
 | 
					        let mut router = Router::<Arc<dyn AppContextTrait>>::new();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        let (graphql_c, oidc_c, metadata_c, static_c) = futures::try_join!(
 | 
					        let (graphql_c, oidc_c, metadata_c, static_c, feeds_c) = futures::try_join!(
 | 
				
			||||||
            controller::graphql::create(context.clone()),
 | 
					            controller::graphql::create(context.clone()),
 | 
				
			||||||
            controller::oidc::create(context.clone()),
 | 
					            controller::oidc::create(context.clone()),
 | 
				
			||||||
            controller::metadata::create(context.clone()),
 | 
					            controller::metadata::create(context.clone()),
 | 
				
			||||||
            controller::r#static::create(context.clone()),
 | 
					            controller::r#static::create(context.clone()),
 | 
				
			||||||
 | 
					            controller::feeds::create(context.clone()),
 | 
				
			||||||
        )?;
 | 
					        )?;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        for c in [graphql_c, oidc_c, metadata_c, static_c] {
 | 
					        for c in [graphql_c, oidc_c, metadata_c, static_c, feeds_c] {
 | 
				
			||||||
            router = c.apply_to(router);
 | 
					            router = c.apply_to(router);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -39,7 +39,7 @@ pub struct EpisodeEnclosureMeta {
 | 
				
			|||||||
    pub magnet_link: Option<String>,
 | 
					    pub magnet_link: Option<String>,
 | 
				
			||||||
    pub torrent_link: Option<String>,
 | 
					    pub torrent_link: Option<String>,
 | 
				
			||||||
    pub pub_date: Option<DateTime<Utc>>,
 | 
					    pub pub_date: Option<DateTime<Utc>>,
 | 
				
			||||||
    pub content_length: Option<u64>,
 | 
					    pub content_length: Option<i64>,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
 | 
					#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
 | 
				
			||||||
 | 
				
			|||||||
@ -41,7 +41,7 @@ use crate::{
 | 
				
			|||||||
pub struct MikanRssEpisodeItem {
 | 
					pub struct MikanRssEpisodeItem {
 | 
				
			||||||
    pub title: String,
 | 
					    pub title: String,
 | 
				
			||||||
    pub torrent_link: Url,
 | 
					    pub torrent_link: Url,
 | 
				
			||||||
    pub content_length: Option<u64>,
 | 
					    pub content_length: Option<i64>,
 | 
				
			||||||
    pub mime: String,
 | 
					    pub mime: String,
 | 
				
			||||||
    pub pub_date: Option<DateTime<Utc>>,
 | 
					    pub pub_date: Option<DateTime<Utc>>,
 | 
				
			||||||
    pub mikan_episode_id: String,
 | 
					    pub mikan_episode_id: String,
 | 
				
			||||||
@ -95,15 +95,32 @@ impl TryFrom<rss::Item> for MikanRssEpisodeItem {
 | 
				
			|||||||
            RecorderError::from_mikan_rss_invalid_field(Cow::Borrowed("mikan_episode_id"))
 | 
					            RecorderError::from_mikan_rss_invalid_field(Cow::Borrowed("mikan_episode_id"))
 | 
				
			||||||
        })?;
 | 
					        })?;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        let pub_date = item
 | 
				
			||||||
 | 
					            .extensions
 | 
				
			||||||
 | 
					            .get("torrent")
 | 
				
			||||||
 | 
					            .and_then(|t| t.get("pubDate"))
 | 
				
			||||||
 | 
					            .and_then(|e| e.first())
 | 
				
			||||||
 | 
					            .and_then(|e| e.value.as_deref());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Ok(MikanRssEpisodeItem {
 | 
					        Ok(MikanRssEpisodeItem {
 | 
				
			||||||
            title,
 | 
					            title,
 | 
				
			||||||
            torrent_link: enclosure_url,
 | 
					            torrent_link: enclosure_url,
 | 
				
			||||||
            content_length: enclosure.length.parse().ok(),
 | 
					            content_length: enclosure.length.parse().ok(),
 | 
				
			||||||
            mime: mime_type,
 | 
					            mime: mime_type,
 | 
				
			||||||
            pub_date: item.pub_date.and_then(|s| {
 | 
					            pub_date: pub_date.and_then(|s| {
 | 
				
			||||||
                DateTime::parse_from_rfc2822(&s)
 | 
					                DateTime::parse_from_rfc2822(s)
 | 
				
			||||||
                    .ok()
 | 
					                    .ok()
 | 
				
			||||||
                    .map(|s| s.with_timezone(&Utc))
 | 
					                    .map(|s| s.with_timezone(&Utc))
 | 
				
			||||||
 | 
					                    .or_else(|| {
 | 
				
			||||||
 | 
					                        DateTime::parse_from_rfc3339(s)
 | 
				
			||||||
 | 
					                            .ok()
 | 
				
			||||||
 | 
					                            .map(|s| s.with_timezone(&Utc))
 | 
				
			||||||
 | 
					                    })
 | 
				
			||||||
 | 
					                    .or_else(|| {
 | 
				
			||||||
 | 
					                        DateTime::parse_from_rfc3339(&format!("{s}+08:00"))
 | 
				
			||||||
 | 
					                            .ok()
 | 
				
			||||||
 | 
					                            .map(|s| s.with_timezone(&Utc))
 | 
				
			||||||
 | 
					                    })
 | 
				
			||||||
            }),
 | 
					            }),
 | 
				
			||||||
            mikan_episode_id,
 | 
					            mikan_episode_id,
 | 
				
			||||||
            magnet_link: None,
 | 
					            magnet_link: None,
 | 
				
			||||||
 | 
				
			|||||||
@ -1,9 +1,50 @@
 | 
				
			|||||||
use seaography::{Builder as SeaographyBuilder, BuilderContext};
 | 
					use std::sync::Arc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use crate::{graphql::domains::subscribers::restrict_subscriber_for_entity, models::feeds};
 | 
					use async_graphql::dynamic::ResolverContext;
 | 
				
			||||||
 | 
					use sea_orm::Value as SeaValue;
 | 
				
			||||||
 | 
					use seaography::{Builder as SeaographyBuilder, BuilderContext, SeaResult};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use crate::{
 | 
				
			||||||
 | 
					    graphql::{
 | 
				
			||||||
 | 
					        domains::subscribers::restrict_subscriber_for_entity,
 | 
				
			||||||
 | 
					        infra::util::{get_entity_column_key, get_entity_key},
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    models::feeds,
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub fn register_feeds_to_schema_context(context: &mut BuilderContext) {
 | 
					pub fn register_feeds_to_schema_context(context: &mut BuilderContext) {
 | 
				
			||||||
    restrict_subscriber_for_entity::<feeds::Entity>(context, &feeds::Column::SubscriberId);
 | 
					    restrict_subscriber_for_entity::<feeds::Entity>(context, &feeds::Column::SubscriberId);
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        let entity_column_key =
 | 
				
			||||||
 | 
					            get_entity_column_key::<feeds::Entity>(context, &feeds::Column::Token);
 | 
				
			||||||
 | 
					        let entity_key = get_entity_key::<feeds::Entity>(context);
 | 
				
			||||||
 | 
					        let entity_name = context.entity_query_field.type_name.as_ref()(&entity_key);
 | 
				
			||||||
 | 
					        let entity_create_one_mutation_field_name = Arc::new(format!(
 | 
				
			||||||
 | 
					            "{}{}",
 | 
				
			||||||
 | 
					            entity_name, context.entity_create_one_mutation.mutation_suffix
 | 
				
			||||||
 | 
					        ));
 | 
				
			||||||
 | 
					        let entity_create_batch_mutation_field_name = Arc::new(format!(
 | 
				
			||||||
 | 
					            "{}{}",
 | 
				
			||||||
 | 
					            entity_name,
 | 
				
			||||||
 | 
					            context.entity_create_batch_mutation.mutation_suffix.clone()
 | 
				
			||||||
 | 
					        ));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        context.types.input_none_conversions.insert(
 | 
				
			||||||
 | 
					            entity_column_key,
 | 
				
			||||||
 | 
					            Box::new(
 | 
				
			||||||
 | 
					                move |context: &ResolverContext| -> SeaResult<Option<SeaValue>> {
 | 
				
			||||||
 | 
					                    let field_name = context.field().name();
 | 
				
			||||||
 | 
					                    if field_name == entity_create_one_mutation_field_name.as_str()
 | 
				
			||||||
 | 
					                        || field_name == entity_create_batch_mutation_field_name.as_str()
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        Ok(Some(SeaValue::String(Some(Box::new(nanoid::nanoid!())))))
 | 
				
			||||||
 | 
					                    } else {
 | 
				
			||||||
 | 
					                        Ok(None)
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					            ),
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub fn register_feeds_to_schema_builder(mut builder: SeaographyBuilder) -> SeaographyBuilder {
 | 
					pub fn register_feeds_to_schema_builder(mut builder: SeaographyBuilder) -> SeaographyBuilder {
 | 
				
			||||||
 | 
				
			|||||||
@ -267,7 +267,6 @@ where
 | 
				
			|||||||
    Box::new(
 | 
					    Box::new(
 | 
				
			||||||
        move |context: &ResolverContext| -> SeaResult<Option<SeaValue>> {
 | 
					        move |context: &ResolverContext| -> SeaResult<Option<SeaValue>> {
 | 
				
			||||||
            let field_name = context.field().name();
 | 
					            let field_name = context.field().name();
 | 
				
			||||||
            tracing::warn!("field_name: {:?}", field_name);
 | 
					 | 
				
			||||||
            if field_name == entity_create_one_mutation_field_name.as_str()
 | 
					            if field_name == entity_create_one_mutation_field_name.as_str()
 | 
				
			||||||
                || field_name == entity_create_batch_mutation_field_name.as_str()
 | 
					                || field_name == entity_create_batch_mutation_field_name.as_str()
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
 | 
				
			|||||||
@ -79,6 +79,9 @@ pub enum Episodes {
 | 
				
			|||||||
    BangumiId,
 | 
					    BangumiId,
 | 
				
			||||||
    SubscriberId,
 | 
					    SubscriberId,
 | 
				
			||||||
    DownloadId,
 | 
					    DownloadId,
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * @deprecated
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    SavePath,
 | 
					    SavePath,
 | 
				
			||||||
    Resolution,
 | 
					    Resolution,
 | 
				
			||||||
    Season,
 | 
					    Season,
 | 
				
			||||||
 | 
				
			|||||||
@ -95,8 +95,8 @@ impl MigrationTrait for Migration {
 | 
				
			|||||||
                        DownloadMimeEnum,
 | 
					                        DownloadMimeEnum,
 | 
				
			||||||
                        DownloadMime::iden_values(),
 | 
					                        DownloadMime::iden_values(),
 | 
				
			||||||
                    ))
 | 
					                    ))
 | 
				
			||||||
                    .col(big_unsigned(Downloads::AllSize))
 | 
					                    .col(big_integer(Downloads::AllSize))
 | 
				
			||||||
                    .col(big_unsigned(Downloads::CurrSize))
 | 
					                    .col(big_integer(Downloads::CurrSize))
 | 
				
			||||||
                    .col(text(Downloads::Url))
 | 
					                    .col(text(Downloads::Url))
 | 
				
			||||||
                    .col(text_null(Downloads::Homepage))
 | 
					                    .col(text_null(Downloads::Homepage))
 | 
				
			||||||
                    .col(text_null(Downloads::SavePath))
 | 
					                    .col(text_null(Downloads::SavePath))
 | 
				
			||||||
 | 
				
			|||||||
@ -1,8 +1,5 @@
 | 
				
			|||||||
use async_trait::async_trait;
 | 
					use async_trait::async_trait;
 | 
				
			||||||
use sea_orm_migration::{
 | 
					use sea_orm_migration::{prelude::*, schema::*};
 | 
				
			||||||
    prelude::*,
 | 
					 | 
				
			||||||
    schema::{enumeration, integer_null, pk_auto, text},
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
use crate::{
 | 
					use crate::{
 | 
				
			||||||
    migrations::defs::{
 | 
					    migrations::defs::{
 | 
				
			||||||
 | 
				
			|||||||
@ -1,10 +1,5 @@
 | 
				
			|||||||
use async_trait::async_trait;
 | 
					use async_trait::async_trait;
 | 
				
			||||||
use sea_orm_migration::{
 | 
					use sea_orm_migration::{prelude::*, schema::*};
 | 
				
			||||||
    prelude::*,
 | 
					 | 
				
			||||||
    schema::{
 | 
					 | 
				
			||||||
        enumeration, enumeration_null, integer_null, text_null, timestamp_with_time_zone_null,
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
use crate::{
 | 
					use crate::{
 | 
				
			||||||
    migrations::defs::{Bangumi, CustomSchemaManagerExt, Episodes},
 | 
					    migrations::defs::{Bangumi, CustomSchemaManagerExt, Episodes},
 | 
				
			||||||
@ -85,7 +80,10 @@ impl MigrationTrait for Migration {
 | 
				
			|||||||
                        .add_column_if_not_exists(timestamp_with_time_zone_null(
 | 
					                        .add_column_if_not_exists(timestamp_with_time_zone_null(
 | 
				
			||||||
                            Episodes::EnclosurePubDate,
 | 
					                            Episodes::EnclosurePubDate,
 | 
				
			||||||
                        ))
 | 
					                        ))
 | 
				
			||||||
                        .add_column_if_not_exists(integer_null(Episodes::EnclosureContentLength))
 | 
					                        .add_column_if_not_exists(big_integer_null(
 | 
				
			||||||
 | 
					                            Episodes::EnclosureContentLength,
 | 
				
			||||||
 | 
					                        ))
 | 
				
			||||||
 | 
					                        .drop_column(Episodes::SavePath)
 | 
				
			||||||
                        .to_owned(),
 | 
					                        .to_owned(),
 | 
				
			||||||
                )
 | 
					                )
 | 
				
			||||||
                .await?;
 | 
					                .await?;
 | 
				
			||||||
 | 
				
			|||||||
@ -17,7 +17,7 @@ use crate::{
 | 
				
			|||||||
            MikanBangumiHash, MikanBangumiMeta, build_mikan_bangumi_subscription_rss_url,
 | 
					            MikanBangumiHash, MikanBangumiMeta, build_mikan_bangumi_subscription_rss_url,
 | 
				
			||||||
            scrape_mikan_poster_meta_from_image_url,
 | 
					            scrape_mikan_poster_meta_from_image_url,
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        origin::{OriginCompTrait, SeasonComp},
 | 
					        origin::{BangumiComps, OriginCompTrait},
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -129,11 +129,12 @@ impl ActiveModel {
 | 
				
			|||||||
    ) -> RecorderResult<Self> {
 | 
					    ) -> RecorderResult<Self> {
 | 
				
			||||||
        let mikan_client = ctx.mikan();
 | 
					        let mikan_client = ctx.mikan();
 | 
				
			||||||
        let mikan_base_url = mikan_client.base_url();
 | 
					        let mikan_base_url = mikan_client.base_url();
 | 
				
			||||||
        let season_comp = SeasonComp::parse_comp(&meta.bangumi_title)
 | 
					        let season_comp = BangumiComps::parse_comp(&meta.bangumi_title)
 | 
				
			||||||
            .ok()
 | 
					            .ok()
 | 
				
			||||||
            .map(|(_, s)| s);
 | 
					            .map(|(_, s)| s)
 | 
				
			||||||
 | 
					            .and_then(|s| s.season);
 | 
				
			||||||
        let season_index = season_comp.as_ref().map(|s| s.num).unwrap_or(1);
 | 
					        let season_index = season_comp.as_ref().map(|s| s.num).unwrap_or(1);
 | 
				
			||||||
        let season_raw = season_comp.map(|s| s.source.into_owned());
 | 
					        let season_raw = season_comp.map(|s| s.source.to_string());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        let rss_url = build_mikan_bangumi_subscription_rss_url(
 | 
					        let rss_url = build_mikan_bangumi_subscription_rss_url(
 | 
				
			||||||
            mikan_base_url.clone(),
 | 
					            mikan_base_url.clone(),
 | 
				
			||||||
@ -162,6 +163,7 @@ impl ActiveModel {
 | 
				
			|||||||
            origin_poster_link: ActiveValue::Set(meta.origin_poster_src.map(|src| src.to_string())),
 | 
					            origin_poster_link: ActiveValue::Set(meta.origin_poster_src.map(|src| src.to_string())),
 | 
				
			||||||
            homepage: ActiveValue::Set(Some(meta.homepage.to_string())),
 | 
					            homepage: ActiveValue::Set(Some(meta.homepage.to_string())),
 | 
				
			||||||
            rss_link: ActiveValue::Set(Some(rss_url.to_string())),
 | 
					            rss_link: ActiveValue::Set(Some(rss_url.to_string())),
 | 
				
			||||||
 | 
					            bangumi_type: ActiveValue::Set(BangumiType::Mikan),
 | 
				
			||||||
            ..Default::default()
 | 
					            ..Default::default()
 | 
				
			||||||
        })
 | 
					        })
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
@ -52,8 +52,8 @@ pub struct Model {
 | 
				
			|||||||
    pub status: DownloadStatus,
 | 
					    pub status: DownloadStatus,
 | 
				
			||||||
    pub mime: DownloadMime,
 | 
					    pub mime: DownloadMime,
 | 
				
			||||||
    pub url: String,
 | 
					    pub url: String,
 | 
				
			||||||
    pub all_size: Option<u64>,
 | 
					    pub all_size: Option<i64>,
 | 
				
			||||||
    pub curr_size: Option<u64>,
 | 
					    pub curr_size: Option<i64>,
 | 
				
			||||||
    pub homepage: Option<String>,
 | 
					    pub homepage: Option<String>,
 | 
				
			||||||
    pub save_path: Option<String>,
 | 
					    pub save_path: Option<String>,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -36,7 +36,7 @@ pub struct Model {
 | 
				
			|||||||
    pub enclosure_torrent_link: Option<String>,
 | 
					    pub enclosure_torrent_link: Option<String>,
 | 
				
			||||||
    pub enclosure_magnet_link: Option<String>,
 | 
					    pub enclosure_magnet_link: Option<String>,
 | 
				
			||||||
    pub enclosure_pub_date: Option<DateTimeUtc>,
 | 
					    pub enclosure_pub_date: Option<DateTimeUtc>,
 | 
				
			||||||
    pub enclosure_content_length: Option<u64>,
 | 
					    pub enclosure_content_length: Option<i64>,
 | 
				
			||||||
    pub episode_type: EpisodeType,
 | 
					    pub episode_type: EpisodeType,
 | 
				
			||||||
    pub origin_name: String,
 | 
					    pub origin_name: String,
 | 
				
			||||||
    pub display_name: String,
 | 
					    pub display_name: String,
 | 
				
			||||||
@ -166,6 +166,7 @@ impl ActiveModel {
 | 
				
			|||||||
            enclosure_magnet_link: ActiveValue::Set(enclosure_meta.magnet_link),
 | 
					            enclosure_magnet_link: ActiveValue::Set(enclosure_meta.magnet_link),
 | 
				
			||||||
            enclosure_pub_date: ActiveValue::Set(enclosure_meta.pub_date),
 | 
					            enclosure_pub_date: ActiveValue::Set(enclosure_meta.pub_date),
 | 
				
			||||||
            enclosure_content_length: ActiveValue::Set(enclosure_meta.content_length),
 | 
					            enclosure_content_length: ActiveValue::Set(enclosure_meta.content_length),
 | 
				
			||||||
 | 
					            episode_type: ActiveValue::Set(EpisodeType::Mikan),
 | 
				
			||||||
            ..Default::default()
 | 
					            ..Default::default()
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -39,7 +39,9 @@ pub enum FeedSource {
 | 
				
			|||||||
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, DeriveEntityModel)]
 | 
					#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, DeriveEntityModel)]
 | 
				
			||||||
#[sea_orm(table_name = "feeds")]
 | 
					#[sea_orm(table_name = "feeds")]
 | 
				
			||||||
pub struct Model {
 | 
					pub struct Model {
 | 
				
			||||||
 | 
					    #[sea_orm(default_expr = "Expr::current_timestamp()")]
 | 
				
			||||||
    pub created_at: DateTimeUtc,
 | 
					    pub created_at: DateTimeUtc,
 | 
				
			||||||
 | 
					    #[sea_orm(default_expr = "Expr::current_timestamp()")]
 | 
				
			||||||
    pub updated_at: DateTimeUtc,
 | 
					    pub updated_at: DateTimeUtc,
 | 
				
			||||||
    #[sea_orm(primary_key)]
 | 
					    #[sea_orm(primary_key)]
 | 
				
			||||||
    pub id: i32,
 | 
					    pub id: i32,
 | 
				
			||||||
 | 
				
			|||||||
@ -1,5 +1,5 @@
 | 
				
			|||||||
use rss::Channel;
 | 
					use rss::Channel;
 | 
				
			||||||
use sea_orm::{ColumnTrait, EntityTrait, QueryFilter};
 | 
					use sea_orm::{ColumnTrait, EntityTrait, JoinType, QueryFilter, QuerySelect, RelationTrait};
 | 
				
			||||||
use url::Url;
 | 
					use url::Url;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use crate::{
 | 
					use crate::{
 | 
				
			||||||
@ -8,7 +8,7 @@ use crate::{
 | 
				
			|||||||
    models::{
 | 
					    models::{
 | 
				
			||||||
        episodes,
 | 
					        episodes,
 | 
				
			||||||
        feeds::{self, FeedSource, RssFeedTrait, SubscriptionEpisodesFeed},
 | 
					        feeds::{self, FeedSource, RssFeedTrait, SubscriptionEpisodesFeed},
 | 
				
			||||||
        subscriptions,
 | 
					        subscription_episode, subscriptions,
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -22,19 +22,30 @@ impl Feed {
 | 
				
			|||||||
            FeedSource::SubscriptionEpisode => {
 | 
					            FeedSource::SubscriptionEpisode => {
 | 
				
			||||||
                let db = ctx.db();
 | 
					                let db = ctx.db();
 | 
				
			||||||
                let (subscription, episodes) = if let Some(subscription_id) = m.subscription_id
 | 
					                let (subscription, episodes) = if let Some(subscription_id) = m.subscription_id
 | 
				
			||||||
                    && let Some((subscription, episodes)) = subscriptions::Entity::find()
 | 
					                    && let Some(subscription) = subscriptions::Entity::find()
 | 
				
			||||||
                        .filter(subscriptions::Column::Id.eq(subscription_id))
 | 
					                        .filter(subscriptions::Column::Id.eq(subscription_id))
 | 
				
			||||||
                        .find_with_related(episodes::Entity)
 | 
					                        .one(db)
 | 
				
			||||||
                        .all(db)
 | 
					 | 
				
			||||||
                        .await?
 | 
					                        .await?
 | 
				
			||||||
                        .pop()
 | 
					 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
 | 
					                    let episodes = episodes::Entity::find()
 | 
				
			||||||
 | 
					                        .join(
 | 
				
			||||||
 | 
					                            JoinType::InnerJoin,
 | 
				
			||||||
 | 
					                            episodes::Relation::SubscriptionEpisode.def(),
 | 
				
			||||||
 | 
					                        )
 | 
				
			||||||
 | 
					                        .join(
 | 
				
			||||||
 | 
					                            JoinType::InnerJoin,
 | 
				
			||||||
 | 
					                            subscription_episode::Relation::Subscription.def(),
 | 
				
			||||||
 | 
					                        )
 | 
				
			||||||
 | 
					                        .filter(subscriptions::Column::Id.eq(subscription_id))
 | 
				
			||||||
 | 
					                        .all(db)
 | 
				
			||||||
 | 
					                        .await?;
 | 
				
			||||||
                    (subscription, episodes)
 | 
					                    (subscription, episodes)
 | 
				
			||||||
                } else {
 | 
					                } else {
 | 
				
			||||||
                    return Err(RecorderError::ModelEntityNotFound {
 | 
					                    return Err(RecorderError::ModelEntityNotFound {
 | 
				
			||||||
                        entity: "Subscription".into(),
 | 
					                        entity: "Subscription".into(),
 | 
				
			||||||
                    });
 | 
					                    });
 | 
				
			||||||
                };
 | 
					                };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                Ok(Feed::SubscritpionEpisodes(
 | 
					                Ok(Feed::SubscritpionEpisodes(
 | 
				
			||||||
                    SubscriptionEpisodesFeed::from_model(m, subscription, episodes),
 | 
					                    SubscriptionEpisodesFeed::from_model(m, subscription, episodes),
 | 
				
			||||||
                ))
 | 
					                ))
 | 
				
			||||||
 | 
				
			|||||||
@ -23,7 +23,7 @@ pub trait RssFeedItemTrait: Sized {
 | 
				
			|||||||
    fn get_enclosure_link(&self, ctx: &dyn AppContextTrait, api_base: &Url)
 | 
					    fn get_enclosure_link(&self, ctx: &dyn AppContextTrait, api_base: &Url)
 | 
				
			||||||
    -> Option<Cow<'_, str>>;
 | 
					    -> Option<Cow<'_, str>>;
 | 
				
			||||||
    fn get_enclosure_pub_date(&self) -> Option<DateTime<Utc>>;
 | 
					    fn get_enclosure_pub_date(&self) -> Option<DateTime<Utc>>;
 | 
				
			||||||
    fn get_enclosure_content_length(&self) -> Option<u64>;
 | 
					    fn get_enclosure_content_length(&self) -> Option<i64>;
 | 
				
			||||||
    fn into_item(self, ctx: &dyn AppContextTrait, api_base: &Url) -> RecorderResult<Item> {
 | 
					    fn into_item(self, ctx: &dyn AppContextTrait, api_base: &Url) -> RecorderResult<Item> {
 | 
				
			||||||
        let enclosure_mime_type =
 | 
					        let enclosure_mime_type =
 | 
				
			||||||
            self.get_enclosure_mime()
 | 
					            self.get_enclosure_mime()
 | 
				
			||||||
@ -43,12 +43,7 @@ pub trait RssFeedItemTrait: Sized {
 | 
				
			|||||||
                source: None.into(),
 | 
					                source: None.into(),
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        })?;
 | 
					        })?;
 | 
				
			||||||
        let enclosure_pub_date = self.get_enclosure_pub_date().ok_or_else(|| {
 | 
					        let enclosure_pub_date = self.get_enclosure_pub_date();
 | 
				
			||||||
            RecorderError::MikanRssInvalidFieldError {
 | 
					 | 
				
			||||||
                field: "enclosure_pub_date".into(),
 | 
					 | 
				
			||||||
                source: None.into(),
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        })?;
 | 
					 | 
				
			||||||
        let link = self.get_link(ctx, api_base).ok_or_else(|| {
 | 
					        let link = self.get_link(ctx, api_base).ok_or_else(|| {
 | 
				
			||||||
            RecorderError::MikanRssInvalidFieldError {
 | 
					            RecorderError::MikanRssInvalidFieldError {
 | 
				
			||||||
                field: "link".into(),
 | 
					                field: "link".into(),
 | 
				
			||||||
@ -58,9 +53,8 @@ pub trait RssFeedItemTrait: Sized {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        let mut extensions = ExtensionMap::default();
 | 
					        let mut extensions = ExtensionMap::default();
 | 
				
			||||||
        if enclosure_mime_type == BITTORRENT_MIME_TYPE {
 | 
					        if enclosure_mime_type == BITTORRENT_MIME_TYPE {
 | 
				
			||||||
            extensions.insert(
 | 
					            extensions.insert("torrent".to_string(), {
 | 
				
			||||||
                "torrent".to_string(),
 | 
					                let mut map = btreemap! {
 | 
				
			||||||
                btreemap! {
 | 
					 | 
				
			||||||
                    "link".to_string() => vec![
 | 
					                    "link".to_string() => vec![
 | 
				
			||||||
                        ExtensionBuilder::default().name(
 | 
					                        ExtensionBuilder::default().name(
 | 
				
			||||||
                        "link"
 | 
					                        "link"
 | 
				
			||||||
@ -71,13 +65,20 @@ pub trait RssFeedItemTrait: Sized {
 | 
				
			|||||||
                            "contentLength"
 | 
					                            "contentLength"
 | 
				
			||||||
                        ).value(enclosure_content_length.to_string()).build()
 | 
					                        ).value(enclosure_content_length.to_string()).build()
 | 
				
			||||||
                    ],
 | 
					                    ],
 | 
				
			||||||
                    "pubDate".to_string() => vec![
 | 
					                };
 | 
				
			||||||
                        ExtensionBuilder::default().name(
 | 
					                if let Some(pub_date) = enclosure_pub_date {
 | 
				
			||||||
                            "pubDate"
 | 
					                    map.insert(
 | 
				
			||||||
                        ).value(enclosure_pub_date.to_rfc3339()).build()
 | 
					                        "pubDate".to_string(),
 | 
				
			||||||
                    ],
 | 
					                        vec![
 | 
				
			||||||
                },
 | 
					                            ExtensionBuilder::default()
 | 
				
			||||||
            );
 | 
					                                .name("pubDate")
 | 
				
			||||||
 | 
					                                .value(pub_date.to_rfc3339())
 | 
				
			||||||
 | 
					                                .build(),
 | 
				
			||||||
 | 
					                        ],
 | 
				
			||||||
 | 
					                    );
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                map
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        let enclosure = EnclosureBuilder::default()
 | 
					        let enclosure = EnclosureBuilder::default()
 | 
				
			||||||
@ -97,7 +98,6 @@ pub trait RssFeedItemTrait: Sized {
 | 
				
			|||||||
            .description(self.get_description().to_string())
 | 
					            .description(self.get_description().to_string())
 | 
				
			||||||
            .link(link.to_string())
 | 
					            .link(link.to_string())
 | 
				
			||||||
            .enclosure(enclosure)
 | 
					            .enclosure(enclosure)
 | 
				
			||||||
            .pub_date(enclosure_pub_date.to_rfc3339())
 | 
					 | 
				
			||||||
            .extensions(extensions)
 | 
					            .extensions(extensions)
 | 
				
			||||||
            .build();
 | 
					            .build();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -74,7 +74,7 @@ impl RssFeedItemTrait for episodes::Model {
 | 
				
			|||||||
        self.enclosure_pub_date
 | 
					        self.enclosure_pub_date
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    fn get_enclosure_content_length(&self) -> Option<u64> {
 | 
					    fn get_enclosure_content_length(&self) -> Option<i64> {
 | 
				
			||||||
        self.enclosure_content_length
 | 
					        self.enclosure_content_length
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -84,8 +84,8 @@ impl RssFeedTrait for SubscriptionEpisodesFeed {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    fn get_description(&self) -> Cow<'_, str> {
 | 
					    fn get_description(&self) -> Cow<'_, str> {
 | 
				
			||||||
        Cow::Owned(format!(
 | 
					        Cow::Owned(format!(
 | 
				
			||||||
            "{PROJECT_NAME} - episodes of subscription \"{}\"",
 | 
					            "{PROJECT_NAME} - episodes of subscription {}",
 | 
				
			||||||
            self.subscription.display_name
 | 
					            self.subscription.id
 | 
				
			||||||
        ))
 | 
					        ))
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -41,6 +41,10 @@ pub enum Relation {
 | 
				
			|||||||
    Auth,
 | 
					    Auth,
 | 
				
			||||||
    #[sea_orm(has_many = "super::credential_3rd::Entity")]
 | 
					    #[sea_orm(has_many = "super::credential_3rd::Entity")]
 | 
				
			||||||
    Credential3rd,
 | 
					    Credential3rd,
 | 
				
			||||||
 | 
					    #[sea_orm(has_many = "super::feeds::Entity")]
 | 
				
			||||||
 | 
					    Feed,
 | 
				
			||||||
 | 
					    #[sea_orm(has_many = "super::subscriber_tasks::Entity")]
 | 
				
			||||||
 | 
					    SubscriberTask,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl Related<super::subscriptions::Entity> for Entity {
 | 
					impl Related<super::subscriptions::Entity> for Entity {
 | 
				
			||||||
@ -79,6 +83,18 @@ impl Related<super::credential_3rd::Entity> for Entity {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					impl Related<super::feeds::Entity> for Entity {
 | 
				
			||||||
 | 
					    fn to() -> RelationDef {
 | 
				
			||||||
 | 
					        Relation::Feed.def()
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					impl Related<super::subscriber_tasks::Entity> for Entity {
 | 
				
			||||||
 | 
					    fn to() -> RelationDef {
 | 
				
			||||||
 | 
					        Relation::SubscriberTask.def()
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[derive(Copy, Clone, Debug, EnumIter, DeriveRelatedEntity)]
 | 
					#[derive(Copy, Clone, Debug, EnumIter, DeriveRelatedEntity)]
 | 
				
			||||||
pub enum RelatedEntity {
 | 
					pub enum RelatedEntity {
 | 
				
			||||||
    #[sea_orm(entity = "super::subscriptions::Entity")]
 | 
					    #[sea_orm(entity = "super::subscriptions::Entity")]
 | 
				
			||||||
@ -91,6 +107,10 @@ pub enum RelatedEntity {
 | 
				
			|||||||
    Episode,
 | 
					    Episode,
 | 
				
			||||||
    #[sea_orm(entity = "super::credential_3rd::Entity")]
 | 
					    #[sea_orm(entity = "super::credential_3rd::Entity")]
 | 
				
			||||||
    Credential3rd,
 | 
					    Credential3rd,
 | 
				
			||||||
 | 
					    #[sea_orm(entity = "super::feeds::Entity")]
 | 
				
			||||||
 | 
					    Feed,
 | 
				
			||||||
 | 
					    #[sea_orm(entity = "super::subscriber_tasks::Entity")]
 | 
				
			||||||
 | 
					    SubscriberTask,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[derive(Debug, Deserialize, Serialize)]
 | 
					#[derive(Debug, Deserialize, Serialize)]
 | 
				
			||||||
 | 
				
			|||||||
@ -59,6 +59,8 @@ pub enum Relation {
 | 
				
			|||||||
        on_delete = "SetNull"
 | 
					        on_delete = "SetNull"
 | 
				
			||||||
    )]
 | 
					    )]
 | 
				
			||||||
    Credential3rd,
 | 
					    Credential3rd,
 | 
				
			||||||
 | 
					    #[sea_orm(has_many = "super::feeds::Entity")]
 | 
				
			||||||
 | 
					    Feed,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl Related<super::subscribers::Entity> for Entity {
 | 
					impl Related<super::subscribers::Entity> for Entity {
 | 
				
			||||||
@ -93,6 +95,12 @@ impl Related<super::bangumi::Entity> for Entity {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					impl Related<super::feeds::Entity> for Entity {
 | 
				
			||||||
 | 
					    fn to() -> RelationDef {
 | 
				
			||||||
 | 
					        Relation::Feed.def()
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl Related<super::episodes::Entity> for Entity {
 | 
					impl Related<super::episodes::Entity> for Entity {
 | 
				
			||||||
    fn to() -> RelationDef {
 | 
					    fn to() -> RelationDef {
 | 
				
			||||||
        super::subscription_episode::Relation::Episode.def()
 | 
					        super::subscription_episode::Relation::Episode.def()
 | 
				
			||||||
@ -127,6 +135,8 @@ pub enum RelatedEntity {
 | 
				
			|||||||
    SubscriptionBangumi,
 | 
					    SubscriptionBangumi,
 | 
				
			||||||
    #[sea_orm(entity = "super::credential_3rd::Entity")]
 | 
					    #[sea_orm(entity = "super::credential_3rd::Entity")]
 | 
				
			||||||
    Credential3rd,
 | 
					    Credential3rd,
 | 
				
			||||||
 | 
					    #[sea_orm(entity = "super::feeds::Entity")]
 | 
				
			||||||
 | 
					    Feed,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[async_trait]
 | 
					#[async_trait]
 | 
				
			||||||
 | 
				
			|||||||
@ -1,7 +1,7 @@
 | 
				
			|||||||
use std::sync::Arc;
 | 
					use std::sync::Arc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use axum::{
 | 
					use axum::{
 | 
				
			||||||
    Extension, Router,
 | 
					    Router,
 | 
				
			||||||
    extract::{Path, State},
 | 
					    extract::{Path, State},
 | 
				
			||||||
    response::IntoResponse,
 | 
					    response::IntoResponse,
 | 
				
			||||||
    routing::get,
 | 
					    routing::get,
 | 
				
			||||||
@ -21,21 +21,22 @@ pub const CONTROLLER_PREFIX: &str = "/api/feeds";
 | 
				
			|||||||
async fn rss_handler(
 | 
					async fn rss_handler(
 | 
				
			||||||
    State(ctx): State<Arc<dyn AppContextTrait>>,
 | 
					    State(ctx): State<Arc<dyn AppContextTrait>>,
 | 
				
			||||||
    Path(token): Path<String>,
 | 
					    Path(token): Path<String>,
 | 
				
			||||||
    forwarded_info: Extension<ForwardedRelatedInfo>,
 | 
					    forwarded_info: ForwardedRelatedInfo,
 | 
				
			||||||
) -> RecorderResult<impl IntoResponse> {
 | 
					) -> RecorderResult<impl IntoResponse> {
 | 
				
			||||||
    let api_base = forwarded_info
 | 
					    let api_base = forwarded_info
 | 
				
			||||||
        .resolved_origin()
 | 
					        .resolved_origin()
 | 
				
			||||||
        .ok_or(RecorderError::MissingOriginError)?;
 | 
					        .ok_or(RecorderError::MissingOriginError)?;
 | 
				
			||||||
    let channel = feeds::Model::find_rss_feed_by_token(ctx.as_ref(), &token, &api_base).await?;
 | 
					    let channel = feeds::Model::find_rss_feed_by_token(ctx.as_ref(), &token, &api_base).await?;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    Ok((
 | 
					    Ok((
 | 
				
			||||||
        StatusCode::OK,
 | 
					        StatusCode::OK,
 | 
				
			||||||
        [("Content-Type", "application/rss+xml")],
 | 
					        [("Content-Type", "application/xml; charset=utf-8")],
 | 
				
			||||||
        channel.to_string(),
 | 
					        channel.to_string(),
 | 
				
			||||||
    ))
 | 
					    ))
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub async fn create(_ctx: Arc<dyn AppContextTrait>) -> RecorderResult<Controller> {
 | 
					pub async fn create(_ctx: Arc<dyn AppContextTrait>) -> RecorderResult<Controller> {
 | 
				
			||||||
    let router = Router::<Arc<dyn AppContextTrait>>::new().route("rss/{token}", get(rss_handler));
 | 
					    let router = Router::<Arc<dyn AppContextTrait>>::new().route("/rss/{token}", get(rss_handler));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    Ok(Controller::from_prefix(CONTROLLER_PREFIX, router))
 | 
					    Ok(Controller::from_prefix(CONTROLLER_PREFIX, router))
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -1,7 +1,7 @@
 | 
				
			|||||||
use std::sync::Arc;
 | 
					use std::sync::Arc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use axum::{
 | 
					use axum::{
 | 
				
			||||||
    Extension, Json, Router,
 | 
					    Json, Router,
 | 
				
			||||||
    extract::{Query, State},
 | 
					    extract::{Query, State},
 | 
				
			||||||
    routing::get,
 | 
					    routing::get,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
@ -42,7 +42,7 @@ async fn oidc_callback(
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
async fn oidc_auth(
 | 
					async fn oidc_auth(
 | 
				
			||||||
    State(ctx): State<Arc<dyn AppContextTrait>>,
 | 
					    State(ctx): State<Arc<dyn AppContextTrait>>,
 | 
				
			||||||
    forwarded_info: Extension<ForwardedRelatedInfo>,
 | 
					    forwarded_info: ForwardedRelatedInfo,
 | 
				
			||||||
) -> Result<Json<OidcAuthRequest>, AuthError> {
 | 
					) -> Result<Json<OidcAuthRequest>, AuthError> {
 | 
				
			||||||
    let auth_service = ctx.auth();
 | 
					    let auth_service = ctx.auth();
 | 
				
			||||||
    if let AuthService::Oidc(oidc_auth_service) = auth_service {
 | 
					    if let AuthService::Oidc(oidc_auth_service) = auth_service {
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										19
									
								
								apps/webui/src/domains/recorder/schema/feeds.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								apps/webui/src/domains/recorder/schema/feeds.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,19 @@
 | 
				
			|||||||
 | 
					import { gql } from '@apollo/client';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const INSERT_FEED = gql`
 | 
				
			||||||
 | 
					    mutation InsertFeed($data: FeedsInsertInput!) {
 | 
				
			||||||
 | 
					        feedsCreateOne(data: $data) {
 | 
				
			||||||
 | 
					            id
 | 
				
			||||||
 | 
					            createdAt
 | 
				
			||||||
 | 
					            updatedAt
 | 
				
			||||||
 | 
					            feedType
 | 
				
			||||||
 | 
					            token
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					`;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const DELETE_FEED = gql`
 | 
				
			||||||
 | 
					    mutation DeleteFeed($filters: FeedsFilterInput!) {
 | 
				
			||||||
 | 
					        feedsDelete(filter: $filters)
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					`;
 | 
				
			||||||
@ -95,6 +95,16 @@ query GetSubscriptionDetail ($id: Int!) {
 | 
				
			|||||||
      category
 | 
					      category
 | 
				
			||||||
      sourceUrl
 | 
					      sourceUrl
 | 
				
			||||||
      enabled
 | 
					      enabled
 | 
				
			||||||
 | 
					      feed {
 | 
				
			||||||
 | 
					        nodes {
 | 
				
			||||||
 | 
					           id
 | 
				
			||||||
 | 
					           createdAt
 | 
				
			||||||
 | 
					           updatedAt
 | 
				
			||||||
 | 
					           token
 | 
				
			||||||
 | 
					           feedType
 | 
				
			||||||
 | 
					           feedSource
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
      credential3rd {
 | 
					      credential3rd {
 | 
				
			||||||
         id
 | 
					         id
 | 
				
			||||||
         username
 | 
					         username
 | 
				
			||||||
@ -112,7 +122,6 @@ query GetSubscriptionDetail ($id: Int!) {
 | 
				
			|||||||
          mikanFansubId
 | 
					          mikanFansubId
 | 
				
			||||||
          rssLink
 | 
					          rssLink
 | 
				
			||||||
          posterLink
 | 
					          posterLink
 | 
				
			||||||
          savePath
 | 
					 | 
				
			||||||
          homepage
 | 
					          homepage
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
				
			|||||||
@ -20,11 +20,13 @@ type Documents = {
 | 
				
			|||||||
    "\n  mutation DeleteCredential3rd($filters: Credential3rdFilterInput!) {\n    credential3rdDelete(filter: $filters)\n  }\n": typeof types.DeleteCredential3rdDocument,
 | 
					    "\n  mutation DeleteCredential3rd($filters: Credential3rdFilterInput!) {\n    credential3rdDelete(filter: $filters)\n  }\n": typeof types.DeleteCredential3rdDocument,
 | 
				
			||||||
    "\n  query GetCredential3rdDetail($id: Int!) {\n    credential3rd(filters: { id: { eq: $id } }) {\n      nodes {\n        id\n        cookies\n        username\n        password\n        userAgent\n        createdAt\n        updatedAt\n        credentialType\n      }\n    }\n  }\n": typeof types.GetCredential3rdDetailDocument,
 | 
					    "\n  query GetCredential3rdDetail($id: Int!) {\n    credential3rd(filters: { id: { eq: $id } }) {\n      nodes {\n        id\n        cookies\n        username\n        password\n        userAgent\n        createdAt\n        updatedAt\n        credentialType\n      }\n    }\n  }\n": typeof types.GetCredential3rdDetailDocument,
 | 
				
			||||||
    "\n  query CheckCredential3rdAvailable($id: Int!) {\n    credential3rdCheckAvailable(filter: { id: $id }) {\n       available\n    }\n  }\n": typeof types.CheckCredential3rdAvailableDocument,
 | 
					    "\n  query CheckCredential3rdAvailable($id: Int!) {\n    credential3rdCheckAvailable(filter: { id: $id }) {\n       available\n    }\n  }\n": typeof types.CheckCredential3rdAvailableDocument,
 | 
				
			||||||
 | 
					    "\n    mutation InsertFeed($data: FeedsInsertInput!) {\n        feedsCreateOne(data: $data) {\n            id\n            createdAt\n            updatedAt\n            feedType\n            token\n        }\n    }\n": typeof types.InsertFeedDocument,
 | 
				
			||||||
 | 
					    "\n    mutation DeleteFeed($filters: FeedsFilterInput!) {\n        feedsDelete(filter: $filters)\n    }\n": typeof types.DeleteFeedDocument,
 | 
				
			||||||
    "\n  query GetSubscriptions($filters: SubscriptionsFilterInput!, $orderBy: SubscriptionsOrderInput!, $pagination: PaginationInput!) {\n    subscriptions(\n      pagination: $pagination\n      filters: $filters\n      orderBy: $orderBy\n    ) {\n      nodes {\n        id\n        createdAt\n        updatedAt\n        displayName\n        category\n        sourceUrl\n        enabled\n        credentialId\n      }\n      paginationInfo {\n        total\n        pages\n      }\n    }\n  }\n": typeof types.GetSubscriptionsDocument,
 | 
					    "\n  query GetSubscriptions($filters: SubscriptionsFilterInput!, $orderBy: SubscriptionsOrderInput!, $pagination: PaginationInput!) {\n    subscriptions(\n      pagination: $pagination\n      filters: $filters\n      orderBy: $orderBy\n    ) {\n      nodes {\n        id\n        createdAt\n        updatedAt\n        displayName\n        category\n        sourceUrl\n        enabled\n        credentialId\n      }\n      paginationInfo {\n        total\n        pages\n      }\n    }\n  }\n": typeof types.GetSubscriptionsDocument,
 | 
				
			||||||
    "\n    mutation InsertSubscription($data: SubscriptionsInsertInput!) {\n        subscriptionsCreateOne(data: $data) {\n            id\n            createdAt\n            updatedAt\n            displayName\n            category\n            sourceUrl\n            enabled\n            credentialId\n        }\n    }\n": typeof types.InsertSubscriptionDocument,
 | 
					    "\n    mutation InsertSubscription($data: SubscriptionsInsertInput!) {\n        subscriptionsCreateOne(data: $data) {\n            id\n            createdAt\n            updatedAt\n            displayName\n            category\n            sourceUrl\n            enabled\n            credentialId\n        }\n    }\n": typeof types.InsertSubscriptionDocument,
 | 
				
			||||||
    "\n    mutation UpdateSubscriptions(\n    $data: SubscriptionsUpdateInput!,\n    $filters: SubscriptionsFilterInput!,\n    ) {\n    subscriptionsUpdate (\n        data: $data\n        filter: $filters\n    ) {\n        id\n        createdAt\n        updatedAt\n        displayName\n        category\n        sourceUrl\n        enabled\n    }\n}\n": typeof types.UpdateSubscriptionsDocument,
 | 
					    "\n    mutation UpdateSubscriptions(\n    $data: SubscriptionsUpdateInput!,\n    $filters: SubscriptionsFilterInput!,\n    ) {\n    subscriptionsUpdate (\n        data: $data\n        filter: $filters\n    ) {\n        id\n        createdAt\n        updatedAt\n        displayName\n        category\n        sourceUrl\n        enabled\n    }\n}\n": typeof types.UpdateSubscriptionsDocument,
 | 
				
			||||||
    "\n    mutation DeleteSubscriptions($filters: SubscriptionsFilterInput) {\n        subscriptionsDelete(filter: $filters)\n    }\n": typeof types.DeleteSubscriptionsDocument,
 | 
					    "\n    mutation DeleteSubscriptions($filters: SubscriptionsFilterInput) {\n        subscriptionsDelete(filter: $filters)\n    }\n": typeof types.DeleteSubscriptionsDocument,
 | 
				
			||||||
    "\nquery GetSubscriptionDetail ($id: Int!) {\n  subscriptions(filters: { id: {\n    eq: $id\n  } }) {\n    nodes {\n      id\n      displayName\n      createdAt\n      updatedAt\n      category\n      sourceUrl\n      enabled\n      credential3rd {\n         id\n         username\n      }\n      bangumi {\n        nodes {\n          createdAt\n          updatedAt\n          id\n          mikanBangumiId\n          displayName\n          season\n          seasonRaw\n          fansub\n          mikanFansubId\n          rssLink\n          posterLink\n          savePath\n          homepage\n        }\n      }\n    }\n  }\n}\n": typeof types.GetSubscriptionDetailDocument,
 | 
					    "\nquery GetSubscriptionDetail ($id: Int!) {\n  subscriptions(filters: { id: {\n    eq: $id\n  } }) {\n    nodes {\n      id\n      displayName\n      createdAt\n      updatedAt\n      category\n      sourceUrl\n      enabled\n      feed {\n        nodes {\n           id\n           createdAt\n           updatedAt\n           token\n           feedType\n           feedSource\n        }\n      }\n      credential3rd {\n         id\n         username\n      }\n      bangumi {\n        nodes {\n          createdAt\n          updatedAt\n          id\n          mikanBangumiId\n          displayName\n          season\n          seasonRaw\n          fansub\n          mikanFansubId\n          rssLink\n          posterLink\n          homepage\n        }\n      }\n    }\n  }\n}\n": typeof types.GetSubscriptionDetailDocument,
 | 
				
			||||||
    "\n  mutation SyncSubscriptionFeedsIncremental($filter: SubscriptionsFilterInput!) {\n    subscriptionsSyncOneFeedsIncremental(filter: $filter) {\n      id\n    }\n  }\n": typeof types.SyncSubscriptionFeedsIncrementalDocument,
 | 
					    "\n  mutation SyncSubscriptionFeedsIncremental($filter: SubscriptionsFilterInput!) {\n    subscriptionsSyncOneFeedsIncremental(filter: $filter) {\n      id\n    }\n  }\n": typeof types.SyncSubscriptionFeedsIncrementalDocument,
 | 
				
			||||||
    "\n  mutation SyncSubscriptionFeedsFull($filter: SubscriptionsFilterInput!) {\n    subscriptionsSyncOneFeedsFull(filter: $filter) {\n      id\n    }\n  }\n": typeof types.SyncSubscriptionFeedsFullDocument,
 | 
					    "\n  mutation SyncSubscriptionFeedsFull($filter: SubscriptionsFilterInput!) {\n    subscriptionsSyncOneFeedsFull(filter: $filter) {\n      id\n    }\n  }\n": typeof types.SyncSubscriptionFeedsFullDocument,
 | 
				
			||||||
    "\n  mutation SyncSubscriptionSources($filter: SubscriptionsFilterInput!) {\n    subscriptionsSyncOneSources(filter: $filter) {\n      id\n    }\n  }\n": typeof types.SyncSubscriptionSourcesDocument,
 | 
					    "\n  mutation SyncSubscriptionSources($filter: SubscriptionsFilterInput!) {\n    subscriptionsSyncOneSources(filter: $filter) {\n      id\n    }\n  }\n": typeof types.SyncSubscriptionSourcesDocument,
 | 
				
			||||||
@ -39,11 +41,13 @@ const documents: Documents = {
 | 
				
			|||||||
    "\n  mutation DeleteCredential3rd($filters: Credential3rdFilterInput!) {\n    credential3rdDelete(filter: $filters)\n  }\n": types.DeleteCredential3rdDocument,
 | 
					    "\n  mutation DeleteCredential3rd($filters: Credential3rdFilterInput!) {\n    credential3rdDelete(filter: $filters)\n  }\n": types.DeleteCredential3rdDocument,
 | 
				
			||||||
    "\n  query GetCredential3rdDetail($id: Int!) {\n    credential3rd(filters: { id: { eq: $id } }) {\n      nodes {\n        id\n        cookies\n        username\n        password\n        userAgent\n        createdAt\n        updatedAt\n        credentialType\n      }\n    }\n  }\n": types.GetCredential3rdDetailDocument,
 | 
					    "\n  query GetCredential3rdDetail($id: Int!) {\n    credential3rd(filters: { id: { eq: $id } }) {\n      nodes {\n        id\n        cookies\n        username\n        password\n        userAgent\n        createdAt\n        updatedAt\n        credentialType\n      }\n    }\n  }\n": types.GetCredential3rdDetailDocument,
 | 
				
			||||||
    "\n  query CheckCredential3rdAvailable($id: Int!) {\n    credential3rdCheckAvailable(filter: { id: $id }) {\n       available\n    }\n  }\n": types.CheckCredential3rdAvailableDocument,
 | 
					    "\n  query CheckCredential3rdAvailable($id: Int!) {\n    credential3rdCheckAvailable(filter: { id: $id }) {\n       available\n    }\n  }\n": types.CheckCredential3rdAvailableDocument,
 | 
				
			||||||
 | 
					    "\n    mutation InsertFeed($data: FeedsInsertInput!) {\n        feedsCreateOne(data: $data) {\n            id\n            createdAt\n            updatedAt\n            feedType\n            token\n        }\n    }\n": types.InsertFeedDocument,
 | 
				
			||||||
 | 
					    "\n    mutation DeleteFeed($filters: FeedsFilterInput!) {\n        feedsDelete(filter: $filters)\n    }\n": types.DeleteFeedDocument,
 | 
				
			||||||
    "\n  query GetSubscriptions($filters: SubscriptionsFilterInput!, $orderBy: SubscriptionsOrderInput!, $pagination: PaginationInput!) {\n    subscriptions(\n      pagination: $pagination\n      filters: $filters\n      orderBy: $orderBy\n    ) {\n      nodes {\n        id\n        createdAt\n        updatedAt\n        displayName\n        category\n        sourceUrl\n        enabled\n        credentialId\n      }\n      paginationInfo {\n        total\n        pages\n      }\n    }\n  }\n": types.GetSubscriptionsDocument,
 | 
					    "\n  query GetSubscriptions($filters: SubscriptionsFilterInput!, $orderBy: SubscriptionsOrderInput!, $pagination: PaginationInput!) {\n    subscriptions(\n      pagination: $pagination\n      filters: $filters\n      orderBy: $orderBy\n    ) {\n      nodes {\n        id\n        createdAt\n        updatedAt\n        displayName\n        category\n        sourceUrl\n        enabled\n        credentialId\n      }\n      paginationInfo {\n        total\n        pages\n      }\n    }\n  }\n": types.GetSubscriptionsDocument,
 | 
				
			||||||
    "\n    mutation InsertSubscription($data: SubscriptionsInsertInput!) {\n        subscriptionsCreateOne(data: $data) {\n            id\n            createdAt\n            updatedAt\n            displayName\n            category\n            sourceUrl\n            enabled\n            credentialId\n        }\n    }\n": types.InsertSubscriptionDocument,
 | 
					    "\n    mutation InsertSubscription($data: SubscriptionsInsertInput!) {\n        subscriptionsCreateOne(data: $data) {\n            id\n            createdAt\n            updatedAt\n            displayName\n            category\n            sourceUrl\n            enabled\n            credentialId\n        }\n    }\n": types.InsertSubscriptionDocument,
 | 
				
			||||||
    "\n    mutation UpdateSubscriptions(\n    $data: SubscriptionsUpdateInput!,\n    $filters: SubscriptionsFilterInput!,\n    ) {\n    subscriptionsUpdate (\n        data: $data\n        filter: $filters\n    ) {\n        id\n        createdAt\n        updatedAt\n        displayName\n        category\n        sourceUrl\n        enabled\n    }\n}\n": types.UpdateSubscriptionsDocument,
 | 
					    "\n    mutation UpdateSubscriptions(\n    $data: SubscriptionsUpdateInput!,\n    $filters: SubscriptionsFilterInput!,\n    ) {\n    subscriptionsUpdate (\n        data: $data\n        filter: $filters\n    ) {\n        id\n        createdAt\n        updatedAt\n        displayName\n        category\n        sourceUrl\n        enabled\n    }\n}\n": types.UpdateSubscriptionsDocument,
 | 
				
			||||||
    "\n    mutation DeleteSubscriptions($filters: SubscriptionsFilterInput) {\n        subscriptionsDelete(filter: $filters)\n    }\n": types.DeleteSubscriptionsDocument,
 | 
					    "\n    mutation DeleteSubscriptions($filters: SubscriptionsFilterInput) {\n        subscriptionsDelete(filter: $filters)\n    }\n": types.DeleteSubscriptionsDocument,
 | 
				
			||||||
    "\nquery GetSubscriptionDetail ($id: Int!) {\n  subscriptions(filters: { id: {\n    eq: $id\n  } }) {\n    nodes {\n      id\n      displayName\n      createdAt\n      updatedAt\n      category\n      sourceUrl\n      enabled\n      credential3rd {\n         id\n         username\n      }\n      bangumi {\n        nodes {\n          createdAt\n          updatedAt\n          id\n          mikanBangumiId\n          displayName\n          season\n          seasonRaw\n          fansub\n          mikanFansubId\n          rssLink\n          posterLink\n          savePath\n          homepage\n        }\n      }\n    }\n  }\n}\n": types.GetSubscriptionDetailDocument,
 | 
					    "\nquery GetSubscriptionDetail ($id: Int!) {\n  subscriptions(filters: { id: {\n    eq: $id\n  } }) {\n    nodes {\n      id\n      displayName\n      createdAt\n      updatedAt\n      category\n      sourceUrl\n      enabled\n      feed {\n        nodes {\n           id\n           createdAt\n           updatedAt\n           token\n           feedType\n           feedSource\n        }\n      }\n      credential3rd {\n         id\n         username\n      }\n      bangumi {\n        nodes {\n          createdAt\n          updatedAt\n          id\n          mikanBangumiId\n          displayName\n          season\n          seasonRaw\n          fansub\n          mikanFansubId\n          rssLink\n          posterLink\n          homepage\n        }\n      }\n    }\n  }\n}\n": types.GetSubscriptionDetailDocument,
 | 
				
			||||||
    "\n  mutation SyncSubscriptionFeedsIncremental($filter: SubscriptionsFilterInput!) {\n    subscriptionsSyncOneFeedsIncremental(filter: $filter) {\n      id\n    }\n  }\n": types.SyncSubscriptionFeedsIncrementalDocument,
 | 
					    "\n  mutation SyncSubscriptionFeedsIncremental($filter: SubscriptionsFilterInput!) {\n    subscriptionsSyncOneFeedsIncremental(filter: $filter) {\n      id\n    }\n  }\n": types.SyncSubscriptionFeedsIncrementalDocument,
 | 
				
			||||||
    "\n  mutation SyncSubscriptionFeedsFull($filter: SubscriptionsFilterInput!) {\n    subscriptionsSyncOneFeedsFull(filter: $filter) {\n      id\n    }\n  }\n": types.SyncSubscriptionFeedsFullDocument,
 | 
					    "\n  mutation SyncSubscriptionFeedsFull($filter: SubscriptionsFilterInput!) {\n    subscriptionsSyncOneFeedsFull(filter: $filter) {\n      id\n    }\n  }\n": types.SyncSubscriptionFeedsFullDocument,
 | 
				
			||||||
    "\n  mutation SyncSubscriptionSources($filter: SubscriptionsFilterInput!) {\n    subscriptionsSyncOneSources(filter: $filter) {\n      id\n    }\n  }\n": types.SyncSubscriptionSourcesDocument,
 | 
					    "\n  mutation SyncSubscriptionSources($filter: SubscriptionsFilterInput!) {\n    subscriptionsSyncOneSources(filter: $filter) {\n      id\n    }\n  }\n": types.SyncSubscriptionSourcesDocument,
 | 
				
			||||||
@ -90,6 +94,14 @@ export function gql(source: "\n  query GetCredential3rdDetail($id: Int!) {\n
 | 
				
			|||||||
 * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
 | 
					 * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
export function gql(source: "\n  query CheckCredential3rdAvailable($id: Int!) {\n    credential3rdCheckAvailable(filter: { id: $id }) {\n       available\n    }\n  }\n"): (typeof documents)["\n  query CheckCredential3rdAvailable($id: Int!) {\n    credential3rdCheckAvailable(filter: { id: $id }) {\n       available\n    }\n  }\n"];
 | 
					export function gql(source: "\n  query CheckCredential3rdAvailable($id: Int!) {\n    credential3rdCheckAvailable(filter: { id: $id }) {\n       available\n    }\n  }\n"): (typeof documents)["\n  query CheckCredential3rdAvailable($id: Int!) {\n    credential3rdCheckAvailable(filter: { id: $id }) {\n       available\n    }\n  }\n"];
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					export function gql(source: "\n    mutation InsertFeed($data: FeedsInsertInput!) {\n        feedsCreateOne(data: $data) {\n            id\n            createdAt\n            updatedAt\n            feedType\n            token\n        }\n    }\n"): (typeof documents)["\n    mutation InsertFeed($data: FeedsInsertInput!) {\n        feedsCreateOne(data: $data) {\n            id\n            createdAt\n            updatedAt\n            feedType\n            token\n        }\n    }\n"];
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					export function gql(source: "\n    mutation DeleteFeed($filters: FeedsFilterInput!) {\n        feedsDelete(filter: $filters)\n    }\n"): (typeof documents)["\n    mutation DeleteFeed($filters: FeedsFilterInput!) {\n        feedsDelete(filter: $filters)\n    }\n"];
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
 | 
					 * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
@ -109,7 +121,7 @@ export function gql(source: "\n    mutation DeleteSubscriptions($filters: Subscr
 | 
				
			|||||||
/**
 | 
					/**
 | 
				
			||||||
 * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
 | 
					 * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
export function gql(source: "\nquery GetSubscriptionDetail ($id: Int!) {\n  subscriptions(filters: { id: {\n    eq: $id\n  } }) {\n    nodes {\n      id\n      displayName\n      createdAt\n      updatedAt\n      category\n      sourceUrl\n      enabled\n      credential3rd {\n         id\n         username\n      }\n      bangumi {\n        nodes {\n          createdAt\n          updatedAt\n          id\n          mikanBangumiId\n          displayName\n          season\n          seasonRaw\n          fansub\n          mikanFansubId\n          rssLink\n          posterLink\n          savePath\n          homepage\n        }\n      }\n    }\n  }\n}\n"): (typeof documents)["\nquery GetSubscriptionDetail ($id: Int!) {\n  subscriptions(filters: { id: {\n    eq: $id\n  } }) {\n    nodes {\n      id\n      displayName\n      createdAt\n      updatedAt\n      category\n      sourceUrl\n      enabled\n      credential3rd {\n         id\n         username\n      }\n      bangumi {\n        nodes {\n          createdAt\n          updatedAt\n          id\n          mikanBangumiId\n          displayName\n          season\n          seasonRaw\n          fansub\n          mikanFansubId\n          rssLink\n          posterLink\n          savePath\n          homepage\n        }\n      }\n    }\n  }\n}\n"];
 | 
					export function gql(source: "\nquery GetSubscriptionDetail ($id: Int!) {\n  subscriptions(filters: { id: {\n    eq: $id\n  } }) {\n    nodes {\n      id\n      displayName\n      createdAt\n      updatedAt\n      category\n      sourceUrl\n      enabled\n      feed {\n        nodes {\n           id\n           createdAt\n           updatedAt\n           token\n           feedType\n           feedSource\n        }\n      }\n      credential3rd {\n         id\n         username\n      }\n      bangumi {\n        nodes {\n          createdAt\n          updatedAt\n          id\n          mikanBangumiId\n          displayName\n          season\n          seasonRaw\n          fansub\n          mikanFansubId\n          rssLink\n          posterLink\n          homepage\n        }\n      }\n    }\n  }\n}\n"): (typeof documents)["\nquery GetSubscriptionDetail ($id: Int!) {\n  subscriptions(filters: { id: {\n    eq: $id\n  } }) {\n    nodes {\n      id\n      displayName\n      createdAt\n      updatedAt\n      category\n      sourceUrl\n      enabled\n      feed {\n        nodes {\n           id\n           createdAt\n           updatedAt\n           token\n           feedType\n           feedSource\n        }\n      }\n      credential3rd {\n         id\n         username\n      }\n      bangumi {\n        nodes {\n          createdAt\n          updatedAt\n          id\n          mikanBangumiId\n          displayName\n          season\n          seasonRaw\n          fansub\n          mikanFansubId\n          rssLink\n          posterLink\n          homepage\n        }\n      }\n    }\n  }\n}\n"];
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
 | 
					 * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
				
			|||||||
@ -21,6 +21,7 @@ export type Scalars = {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
export type Bangumi = {
 | 
					export type Bangumi = {
 | 
				
			||||||
  __typename?: 'Bangumi';
 | 
					  __typename?: 'Bangumi';
 | 
				
			||||||
 | 
					  bangumiType: BangumiTypeEnum;
 | 
				
			||||||
  createdAt: Scalars['String']['output'];
 | 
					  createdAt: Scalars['String']['output'];
 | 
				
			||||||
  displayName: Scalars['String']['output'];
 | 
					  displayName: Scalars['String']['output'];
 | 
				
			||||||
  episode: EpisodesConnection;
 | 
					  episode: EpisodesConnection;
 | 
				
			||||||
@ -34,7 +35,6 @@ export type Bangumi = {
 | 
				
			|||||||
  originPosterLink?: Maybe<Scalars['String']['output']>;
 | 
					  originPosterLink?: Maybe<Scalars['String']['output']>;
 | 
				
			||||||
  posterLink?: Maybe<Scalars['String']['output']>;
 | 
					  posterLink?: Maybe<Scalars['String']['output']>;
 | 
				
			||||||
  rssLink?: Maybe<Scalars['String']['output']>;
 | 
					  rssLink?: Maybe<Scalars['String']['output']>;
 | 
				
			||||||
  savePath?: Maybe<Scalars['String']['output']>;
 | 
					 | 
				
			||||||
  season: Scalars['Int']['output'];
 | 
					  season: Scalars['Int']['output'];
 | 
				
			||||||
  seasonRaw?: Maybe<Scalars['String']['output']>;
 | 
					  seasonRaw?: Maybe<Scalars['String']['output']>;
 | 
				
			||||||
  subscriber?: Maybe<Subscribers>;
 | 
					  subscriber?: Maybe<Subscribers>;
 | 
				
			||||||
@ -67,6 +67,7 @@ export type BangumiSubscriptionBangumiArgs = {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
export type BangumiBasic = {
 | 
					export type BangumiBasic = {
 | 
				
			||||||
  __typename?: 'BangumiBasic';
 | 
					  __typename?: 'BangumiBasic';
 | 
				
			||||||
 | 
					  bangumiType: BangumiTypeEnum;
 | 
				
			||||||
  createdAt: Scalars['String']['output'];
 | 
					  createdAt: Scalars['String']['output'];
 | 
				
			||||||
  displayName: Scalars['String']['output'];
 | 
					  displayName: Scalars['String']['output'];
 | 
				
			||||||
  fansub?: Maybe<Scalars['String']['output']>;
 | 
					  fansub?: Maybe<Scalars['String']['output']>;
 | 
				
			||||||
@ -79,7 +80,6 @@ export type BangumiBasic = {
 | 
				
			|||||||
  originPosterLink?: Maybe<Scalars['String']['output']>;
 | 
					  originPosterLink?: Maybe<Scalars['String']['output']>;
 | 
				
			||||||
  posterLink?: Maybe<Scalars['String']['output']>;
 | 
					  posterLink?: Maybe<Scalars['String']['output']>;
 | 
				
			||||||
  rssLink?: Maybe<Scalars['String']['output']>;
 | 
					  rssLink?: Maybe<Scalars['String']['output']>;
 | 
				
			||||||
  savePath?: Maybe<Scalars['String']['output']>;
 | 
					 | 
				
			||||||
  season: Scalars['Int']['output'];
 | 
					  season: Scalars['Int']['output'];
 | 
				
			||||||
  seasonRaw?: Maybe<Scalars['String']['output']>;
 | 
					  seasonRaw?: Maybe<Scalars['String']['output']>;
 | 
				
			||||||
  subscriberId: Scalars['Int']['output'];
 | 
					  subscriberId: Scalars['Int']['output'];
 | 
				
			||||||
@ -102,6 +102,7 @@ export type BangumiEdge = {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
export type BangumiFilterInput = {
 | 
					export type BangumiFilterInput = {
 | 
				
			||||||
  and?: InputMaybe<Array<BangumiFilterInput>>;
 | 
					  and?: InputMaybe<Array<BangumiFilterInput>>;
 | 
				
			||||||
 | 
					  bangumiType?: InputMaybe<BangumiTypeEnumFilterInput>;
 | 
				
			||||||
  createdAt?: InputMaybe<TextFilterInput>;
 | 
					  createdAt?: InputMaybe<TextFilterInput>;
 | 
				
			||||||
  displayName?: InputMaybe<StringFilterInput>;
 | 
					  displayName?: InputMaybe<StringFilterInput>;
 | 
				
			||||||
  fansub?: InputMaybe<StringFilterInput>;
 | 
					  fansub?: InputMaybe<StringFilterInput>;
 | 
				
			||||||
@ -114,14 +115,14 @@ export type BangumiFilterInput = {
 | 
				
			|||||||
  originPosterLink?: InputMaybe<StringFilterInput>;
 | 
					  originPosterLink?: InputMaybe<StringFilterInput>;
 | 
				
			||||||
  posterLink?: InputMaybe<StringFilterInput>;
 | 
					  posterLink?: InputMaybe<StringFilterInput>;
 | 
				
			||||||
  rssLink?: InputMaybe<StringFilterInput>;
 | 
					  rssLink?: InputMaybe<StringFilterInput>;
 | 
				
			||||||
  savePath?: InputMaybe<StringFilterInput>;
 | 
					 | 
				
			||||||
  season?: InputMaybe<IntegerFilterInput>;
 | 
					  season?: InputMaybe<IntegerFilterInput>;
 | 
				
			||||||
  seasonRaw?: InputMaybe<StringFilterInput>;
 | 
					  seasonRaw?: InputMaybe<StringFilterInput>;
 | 
				
			||||||
  subscriberId?: InputMaybe<IntegerFilterInput>;
 | 
					  subscriberId?: InputMaybe<SubscriberIdFilterInput>;
 | 
				
			||||||
  updatedAt?: InputMaybe<TextFilterInput>;
 | 
					  updatedAt?: InputMaybe<TextFilterInput>;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export type BangumiInsertInput = {
 | 
					export type BangumiInsertInput = {
 | 
				
			||||||
 | 
					  bangumiType: BangumiTypeEnum;
 | 
				
			||||||
  createdAt?: InputMaybe<Scalars['String']['input']>;
 | 
					  createdAt?: InputMaybe<Scalars['String']['input']>;
 | 
				
			||||||
  displayName: Scalars['String']['input'];
 | 
					  displayName: Scalars['String']['input'];
 | 
				
			||||||
  fansub?: InputMaybe<Scalars['String']['input']>;
 | 
					  fansub?: InputMaybe<Scalars['String']['input']>;
 | 
				
			||||||
@ -134,14 +135,14 @@ export type BangumiInsertInput = {
 | 
				
			|||||||
  originPosterLink?: InputMaybe<Scalars['String']['input']>;
 | 
					  originPosterLink?: InputMaybe<Scalars['String']['input']>;
 | 
				
			||||||
  posterLink?: InputMaybe<Scalars['String']['input']>;
 | 
					  posterLink?: InputMaybe<Scalars['String']['input']>;
 | 
				
			||||||
  rssLink?: InputMaybe<Scalars['String']['input']>;
 | 
					  rssLink?: InputMaybe<Scalars['String']['input']>;
 | 
				
			||||||
  savePath?: InputMaybe<Scalars['String']['input']>;
 | 
					 | 
				
			||||||
  season: Scalars['Int']['input'];
 | 
					  season: Scalars['Int']['input'];
 | 
				
			||||||
  seasonRaw?: InputMaybe<Scalars['String']['input']>;
 | 
					  seasonRaw?: InputMaybe<Scalars['String']['input']>;
 | 
				
			||||||
  subscriberId: Scalars['Int']['input'];
 | 
					  subscriberId?: InputMaybe<Scalars['Int']['input']>;
 | 
				
			||||||
  updatedAt?: InputMaybe<Scalars['String']['input']>;
 | 
					  updatedAt?: InputMaybe<Scalars['String']['input']>;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export type BangumiOrderInput = {
 | 
					export type BangumiOrderInput = {
 | 
				
			||||||
 | 
					  bangumiType?: InputMaybe<OrderByEnum>;
 | 
				
			||||||
  createdAt?: InputMaybe<OrderByEnum>;
 | 
					  createdAt?: InputMaybe<OrderByEnum>;
 | 
				
			||||||
  displayName?: InputMaybe<OrderByEnum>;
 | 
					  displayName?: InputMaybe<OrderByEnum>;
 | 
				
			||||||
  fansub?: InputMaybe<OrderByEnum>;
 | 
					  fansub?: InputMaybe<OrderByEnum>;
 | 
				
			||||||
@ -154,14 +155,32 @@ export type BangumiOrderInput = {
 | 
				
			|||||||
  originPosterLink?: InputMaybe<OrderByEnum>;
 | 
					  originPosterLink?: InputMaybe<OrderByEnum>;
 | 
				
			||||||
  posterLink?: InputMaybe<OrderByEnum>;
 | 
					  posterLink?: InputMaybe<OrderByEnum>;
 | 
				
			||||||
  rssLink?: InputMaybe<OrderByEnum>;
 | 
					  rssLink?: InputMaybe<OrderByEnum>;
 | 
				
			||||||
  savePath?: InputMaybe<OrderByEnum>;
 | 
					 | 
				
			||||||
  season?: InputMaybe<OrderByEnum>;
 | 
					  season?: InputMaybe<OrderByEnum>;
 | 
				
			||||||
  seasonRaw?: InputMaybe<OrderByEnum>;
 | 
					  seasonRaw?: InputMaybe<OrderByEnum>;
 | 
				
			||||||
  subscriberId?: InputMaybe<OrderByEnum>;
 | 
					  subscriberId?: InputMaybe<OrderByEnum>;
 | 
				
			||||||
  updatedAt?: InputMaybe<OrderByEnum>;
 | 
					  updatedAt?: InputMaybe<OrderByEnum>;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const BangumiTypeEnum = {
 | 
				
			||||||
 | 
					  Mikan: 'mikan'
 | 
				
			||||||
 | 
					} as const;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export type BangumiTypeEnum = typeof BangumiTypeEnum[keyof typeof BangumiTypeEnum];
 | 
				
			||||||
 | 
					export type BangumiTypeEnumFilterInput = {
 | 
				
			||||||
 | 
					  eq?: InputMaybe<BangumiTypeEnum>;
 | 
				
			||||||
 | 
					  gt?: InputMaybe<BangumiTypeEnum>;
 | 
				
			||||||
 | 
					  gte?: InputMaybe<BangumiTypeEnum>;
 | 
				
			||||||
 | 
					  is_in?: InputMaybe<Array<BangumiTypeEnum>>;
 | 
				
			||||||
 | 
					  is_not_in?: InputMaybe<Array<BangumiTypeEnum>>;
 | 
				
			||||||
 | 
					  is_not_null?: InputMaybe<BangumiTypeEnum>;
 | 
				
			||||||
 | 
					  is_null?: InputMaybe<BangumiTypeEnum>;
 | 
				
			||||||
 | 
					  lt?: InputMaybe<BangumiTypeEnum>;
 | 
				
			||||||
 | 
					  lte?: InputMaybe<BangumiTypeEnum>;
 | 
				
			||||||
 | 
					  ne?: InputMaybe<BangumiTypeEnum>;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export type BangumiUpdateInput = {
 | 
					export type BangumiUpdateInput = {
 | 
				
			||||||
 | 
					  bangumiType?: InputMaybe<BangumiTypeEnum>;
 | 
				
			||||||
  createdAt?: InputMaybe<Scalars['String']['input']>;
 | 
					  createdAt?: InputMaybe<Scalars['String']['input']>;
 | 
				
			||||||
  displayName?: InputMaybe<Scalars['String']['input']>;
 | 
					  displayName?: InputMaybe<Scalars['String']['input']>;
 | 
				
			||||||
  fansub?: InputMaybe<Scalars['String']['input']>;
 | 
					  fansub?: InputMaybe<Scalars['String']['input']>;
 | 
				
			||||||
@ -174,10 +193,8 @@ export type BangumiUpdateInput = {
 | 
				
			|||||||
  originPosterLink?: InputMaybe<Scalars['String']['input']>;
 | 
					  originPosterLink?: InputMaybe<Scalars['String']['input']>;
 | 
				
			||||||
  posterLink?: InputMaybe<Scalars['String']['input']>;
 | 
					  posterLink?: InputMaybe<Scalars['String']['input']>;
 | 
				
			||||||
  rssLink?: InputMaybe<Scalars['String']['input']>;
 | 
					  rssLink?: InputMaybe<Scalars['String']['input']>;
 | 
				
			||||||
  savePath?: InputMaybe<Scalars['String']['input']>;
 | 
					 | 
				
			||||||
  season?: InputMaybe<Scalars['Int']['input']>;
 | 
					  season?: InputMaybe<Scalars['Int']['input']>;
 | 
				
			||||||
  seasonRaw?: InputMaybe<Scalars['String']['input']>;
 | 
					  seasonRaw?: InputMaybe<Scalars['String']['input']>;
 | 
				
			||||||
  subscriberId?: InputMaybe<Scalars['Int']['input']>;
 | 
					 | 
				
			||||||
  updatedAt?: InputMaybe<Scalars['String']['input']>;
 | 
					  updatedAt?: InputMaybe<Scalars['String']['input']>;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -613,6 +630,24 @@ export type DownloadsUpdateInput = {
 | 
				
			|||||||
  url?: InputMaybe<Scalars['String']['input']>;
 | 
					  url?: InputMaybe<Scalars['String']['input']>;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const EpisodeTypeEnum = {
 | 
				
			||||||
 | 
					  Mikan: 'mikan'
 | 
				
			||||||
 | 
					} as const;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export type EpisodeTypeEnum = typeof EpisodeTypeEnum[keyof typeof EpisodeTypeEnum];
 | 
				
			||||||
 | 
					export type EpisodeTypeEnumFilterInput = {
 | 
				
			||||||
 | 
					  eq?: InputMaybe<EpisodeTypeEnum>;
 | 
				
			||||||
 | 
					  gt?: InputMaybe<EpisodeTypeEnum>;
 | 
				
			||||||
 | 
					  gte?: InputMaybe<EpisodeTypeEnum>;
 | 
				
			||||||
 | 
					  is_in?: InputMaybe<Array<EpisodeTypeEnum>>;
 | 
				
			||||||
 | 
					  is_not_in?: InputMaybe<Array<EpisodeTypeEnum>>;
 | 
				
			||||||
 | 
					  is_not_null?: InputMaybe<EpisodeTypeEnum>;
 | 
				
			||||||
 | 
					  is_null?: InputMaybe<EpisodeTypeEnum>;
 | 
				
			||||||
 | 
					  lt?: InputMaybe<EpisodeTypeEnum>;
 | 
				
			||||||
 | 
					  lte?: InputMaybe<EpisodeTypeEnum>;
 | 
				
			||||||
 | 
					  ne?: InputMaybe<EpisodeTypeEnum>;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export type Episodes = {
 | 
					export type Episodes = {
 | 
				
			||||||
  __typename?: 'Episodes';
 | 
					  __typename?: 'Episodes';
 | 
				
			||||||
  bangumi?: Maybe<Bangumi>;
 | 
					  bangumi?: Maybe<Bangumi>;
 | 
				
			||||||
@ -620,7 +655,12 @@ export type Episodes = {
 | 
				
			|||||||
  createdAt: Scalars['String']['output'];
 | 
					  createdAt: Scalars['String']['output'];
 | 
				
			||||||
  displayName: Scalars['String']['output'];
 | 
					  displayName: Scalars['String']['output'];
 | 
				
			||||||
  download: SubscriptionsConnection;
 | 
					  download: SubscriptionsConnection;
 | 
				
			||||||
 | 
					  enclosureContentLength?: Maybe<Scalars['Int']['output']>;
 | 
				
			||||||
 | 
					  enclosureMagnetLink?: Maybe<Scalars['String']['output']>;
 | 
				
			||||||
 | 
					  enclosurePubDate?: Maybe<Scalars['String']['output']>;
 | 
				
			||||||
 | 
					  enclosureTorrentLink?: Maybe<Scalars['String']['output']>;
 | 
				
			||||||
  episodeIndex: Scalars['Int']['output'];
 | 
					  episodeIndex: Scalars['Int']['output'];
 | 
				
			||||||
 | 
					  episodeType: EpisodeTypeEnum;
 | 
				
			||||||
  fansub?: Maybe<Scalars['String']['output']>;
 | 
					  fansub?: Maybe<Scalars['String']['output']>;
 | 
				
			||||||
  homepage?: Maybe<Scalars['String']['output']>;
 | 
					  homepage?: Maybe<Scalars['String']['output']>;
 | 
				
			||||||
  id: Scalars['Int']['output'];
 | 
					  id: Scalars['Int']['output'];
 | 
				
			||||||
@ -629,7 +669,6 @@ export type Episodes = {
 | 
				
			|||||||
  originPosterLink?: Maybe<Scalars['String']['output']>;
 | 
					  originPosterLink?: Maybe<Scalars['String']['output']>;
 | 
				
			||||||
  posterLink?: Maybe<Scalars['String']['output']>;
 | 
					  posterLink?: Maybe<Scalars['String']['output']>;
 | 
				
			||||||
  resolution?: Maybe<Scalars['String']['output']>;
 | 
					  resolution?: Maybe<Scalars['String']['output']>;
 | 
				
			||||||
  savePath?: Maybe<Scalars['String']['output']>;
 | 
					 | 
				
			||||||
  season: Scalars['Int']['output'];
 | 
					  season: Scalars['Int']['output'];
 | 
				
			||||||
  seasonRaw?: Maybe<Scalars['String']['output']>;
 | 
					  seasonRaw?: Maybe<Scalars['String']['output']>;
 | 
				
			||||||
  source?: Maybe<Scalars['String']['output']>;
 | 
					  source?: Maybe<Scalars['String']['output']>;
 | 
				
			||||||
@ -667,7 +706,12 @@ export type EpisodesBasic = {
 | 
				
			|||||||
  bangumiId: Scalars['Int']['output'];
 | 
					  bangumiId: Scalars['Int']['output'];
 | 
				
			||||||
  createdAt: Scalars['String']['output'];
 | 
					  createdAt: Scalars['String']['output'];
 | 
				
			||||||
  displayName: Scalars['String']['output'];
 | 
					  displayName: Scalars['String']['output'];
 | 
				
			||||||
 | 
					  enclosureContentLength?: Maybe<Scalars['Int']['output']>;
 | 
				
			||||||
 | 
					  enclosureMagnetLink?: Maybe<Scalars['String']['output']>;
 | 
				
			||||||
 | 
					  enclosurePubDate?: Maybe<Scalars['String']['output']>;
 | 
				
			||||||
 | 
					  enclosureTorrentLink?: Maybe<Scalars['String']['output']>;
 | 
				
			||||||
  episodeIndex: Scalars['Int']['output'];
 | 
					  episodeIndex: Scalars['Int']['output'];
 | 
				
			||||||
 | 
					  episodeType: EpisodeTypeEnum;
 | 
				
			||||||
  fansub?: Maybe<Scalars['String']['output']>;
 | 
					  fansub?: Maybe<Scalars['String']['output']>;
 | 
				
			||||||
  homepage?: Maybe<Scalars['String']['output']>;
 | 
					  homepage?: Maybe<Scalars['String']['output']>;
 | 
				
			||||||
  id: Scalars['Int']['output'];
 | 
					  id: Scalars['Int']['output'];
 | 
				
			||||||
@ -676,7 +720,6 @@ export type EpisodesBasic = {
 | 
				
			|||||||
  originPosterLink?: Maybe<Scalars['String']['output']>;
 | 
					  originPosterLink?: Maybe<Scalars['String']['output']>;
 | 
				
			||||||
  posterLink?: Maybe<Scalars['String']['output']>;
 | 
					  posterLink?: Maybe<Scalars['String']['output']>;
 | 
				
			||||||
  resolution?: Maybe<Scalars['String']['output']>;
 | 
					  resolution?: Maybe<Scalars['String']['output']>;
 | 
				
			||||||
  savePath?: Maybe<Scalars['String']['output']>;
 | 
					 | 
				
			||||||
  season: Scalars['Int']['output'];
 | 
					  season: Scalars['Int']['output'];
 | 
				
			||||||
  seasonRaw?: Maybe<Scalars['String']['output']>;
 | 
					  seasonRaw?: Maybe<Scalars['String']['output']>;
 | 
				
			||||||
  source?: Maybe<Scalars['String']['output']>;
 | 
					  source?: Maybe<Scalars['String']['output']>;
 | 
				
			||||||
@ -704,7 +747,12 @@ export type EpisodesFilterInput = {
 | 
				
			|||||||
  bangumiId?: InputMaybe<IntegerFilterInput>;
 | 
					  bangumiId?: InputMaybe<IntegerFilterInput>;
 | 
				
			||||||
  createdAt?: InputMaybe<TextFilterInput>;
 | 
					  createdAt?: InputMaybe<TextFilterInput>;
 | 
				
			||||||
  displayName?: InputMaybe<StringFilterInput>;
 | 
					  displayName?: InputMaybe<StringFilterInput>;
 | 
				
			||||||
 | 
					  enclosureContentLength?: InputMaybe<IntegerFilterInput>;
 | 
				
			||||||
 | 
					  enclosureMagnetLink?: InputMaybe<StringFilterInput>;
 | 
				
			||||||
 | 
					  enclosurePubDate?: InputMaybe<TextFilterInput>;
 | 
				
			||||||
 | 
					  enclosureTorrentLink?: InputMaybe<StringFilterInput>;
 | 
				
			||||||
  episodeIndex?: InputMaybe<IntegerFilterInput>;
 | 
					  episodeIndex?: InputMaybe<IntegerFilterInput>;
 | 
				
			||||||
 | 
					  episodeType?: InputMaybe<EpisodeTypeEnumFilterInput>;
 | 
				
			||||||
  fansub?: InputMaybe<StringFilterInput>;
 | 
					  fansub?: InputMaybe<StringFilterInput>;
 | 
				
			||||||
  homepage?: InputMaybe<StringFilterInput>;
 | 
					  homepage?: InputMaybe<StringFilterInput>;
 | 
				
			||||||
  id?: InputMaybe<IntegerFilterInput>;
 | 
					  id?: InputMaybe<IntegerFilterInput>;
 | 
				
			||||||
@ -714,7 +762,6 @@ export type EpisodesFilterInput = {
 | 
				
			|||||||
  originPosterLink?: InputMaybe<StringFilterInput>;
 | 
					  originPosterLink?: InputMaybe<StringFilterInput>;
 | 
				
			||||||
  posterLink?: InputMaybe<StringFilterInput>;
 | 
					  posterLink?: InputMaybe<StringFilterInput>;
 | 
				
			||||||
  resolution?: InputMaybe<StringFilterInput>;
 | 
					  resolution?: InputMaybe<StringFilterInput>;
 | 
				
			||||||
  savePath?: InputMaybe<StringFilterInput>;
 | 
					 | 
				
			||||||
  season?: InputMaybe<IntegerFilterInput>;
 | 
					  season?: InputMaybe<IntegerFilterInput>;
 | 
				
			||||||
  seasonRaw?: InputMaybe<StringFilterInput>;
 | 
					  seasonRaw?: InputMaybe<StringFilterInput>;
 | 
				
			||||||
  source?: InputMaybe<StringFilterInput>;
 | 
					  source?: InputMaybe<StringFilterInput>;
 | 
				
			||||||
@ -727,7 +774,12 @@ export type EpisodesInsertInput = {
 | 
				
			|||||||
  bangumiId: Scalars['Int']['input'];
 | 
					  bangumiId: Scalars['Int']['input'];
 | 
				
			||||||
  createdAt?: InputMaybe<Scalars['String']['input']>;
 | 
					  createdAt?: InputMaybe<Scalars['String']['input']>;
 | 
				
			||||||
  displayName: Scalars['String']['input'];
 | 
					  displayName: Scalars['String']['input'];
 | 
				
			||||||
 | 
					  enclosureContentLength?: InputMaybe<Scalars['Int']['input']>;
 | 
				
			||||||
 | 
					  enclosureMagnetLink?: InputMaybe<Scalars['String']['input']>;
 | 
				
			||||||
 | 
					  enclosurePubDate?: InputMaybe<Scalars['String']['input']>;
 | 
				
			||||||
 | 
					  enclosureTorrentLink?: InputMaybe<Scalars['String']['input']>;
 | 
				
			||||||
  episodeIndex: Scalars['Int']['input'];
 | 
					  episodeIndex: Scalars['Int']['input'];
 | 
				
			||||||
 | 
					  episodeType: EpisodeTypeEnum;
 | 
				
			||||||
  fansub?: InputMaybe<Scalars['String']['input']>;
 | 
					  fansub?: InputMaybe<Scalars['String']['input']>;
 | 
				
			||||||
  homepage?: InputMaybe<Scalars['String']['input']>;
 | 
					  homepage?: InputMaybe<Scalars['String']['input']>;
 | 
				
			||||||
  id?: InputMaybe<Scalars['Int']['input']>;
 | 
					  id?: InputMaybe<Scalars['Int']['input']>;
 | 
				
			||||||
@ -736,7 +788,6 @@ export type EpisodesInsertInput = {
 | 
				
			|||||||
  originPosterLink?: InputMaybe<Scalars['String']['input']>;
 | 
					  originPosterLink?: InputMaybe<Scalars['String']['input']>;
 | 
				
			||||||
  posterLink?: InputMaybe<Scalars['String']['input']>;
 | 
					  posterLink?: InputMaybe<Scalars['String']['input']>;
 | 
				
			||||||
  resolution?: InputMaybe<Scalars['String']['input']>;
 | 
					  resolution?: InputMaybe<Scalars['String']['input']>;
 | 
				
			||||||
  savePath?: InputMaybe<Scalars['String']['input']>;
 | 
					 | 
				
			||||||
  season: Scalars['Int']['input'];
 | 
					  season: Scalars['Int']['input'];
 | 
				
			||||||
  seasonRaw?: InputMaybe<Scalars['String']['input']>;
 | 
					  seasonRaw?: InputMaybe<Scalars['String']['input']>;
 | 
				
			||||||
  source?: InputMaybe<Scalars['String']['input']>;
 | 
					  source?: InputMaybe<Scalars['String']['input']>;
 | 
				
			||||||
@ -749,7 +800,12 @@ export type EpisodesOrderInput = {
 | 
				
			|||||||
  bangumiId?: InputMaybe<OrderByEnum>;
 | 
					  bangumiId?: InputMaybe<OrderByEnum>;
 | 
				
			||||||
  createdAt?: InputMaybe<OrderByEnum>;
 | 
					  createdAt?: InputMaybe<OrderByEnum>;
 | 
				
			||||||
  displayName?: InputMaybe<OrderByEnum>;
 | 
					  displayName?: InputMaybe<OrderByEnum>;
 | 
				
			||||||
 | 
					  enclosureContentLength?: InputMaybe<OrderByEnum>;
 | 
				
			||||||
 | 
					  enclosureMagnetLink?: InputMaybe<OrderByEnum>;
 | 
				
			||||||
 | 
					  enclosurePubDate?: InputMaybe<OrderByEnum>;
 | 
				
			||||||
 | 
					  enclosureTorrentLink?: InputMaybe<OrderByEnum>;
 | 
				
			||||||
  episodeIndex?: InputMaybe<OrderByEnum>;
 | 
					  episodeIndex?: InputMaybe<OrderByEnum>;
 | 
				
			||||||
 | 
					  episodeType?: InputMaybe<OrderByEnum>;
 | 
				
			||||||
  fansub?: InputMaybe<OrderByEnum>;
 | 
					  fansub?: InputMaybe<OrderByEnum>;
 | 
				
			||||||
  homepage?: InputMaybe<OrderByEnum>;
 | 
					  homepage?: InputMaybe<OrderByEnum>;
 | 
				
			||||||
  id?: InputMaybe<OrderByEnum>;
 | 
					  id?: InputMaybe<OrderByEnum>;
 | 
				
			||||||
@ -758,7 +814,6 @@ export type EpisodesOrderInput = {
 | 
				
			|||||||
  originPosterLink?: InputMaybe<OrderByEnum>;
 | 
					  originPosterLink?: InputMaybe<OrderByEnum>;
 | 
				
			||||||
  posterLink?: InputMaybe<OrderByEnum>;
 | 
					  posterLink?: InputMaybe<OrderByEnum>;
 | 
				
			||||||
  resolution?: InputMaybe<OrderByEnum>;
 | 
					  resolution?: InputMaybe<OrderByEnum>;
 | 
				
			||||||
  savePath?: InputMaybe<OrderByEnum>;
 | 
					 | 
				
			||||||
  season?: InputMaybe<OrderByEnum>;
 | 
					  season?: InputMaybe<OrderByEnum>;
 | 
				
			||||||
  seasonRaw?: InputMaybe<OrderByEnum>;
 | 
					  seasonRaw?: InputMaybe<OrderByEnum>;
 | 
				
			||||||
  source?: InputMaybe<OrderByEnum>;
 | 
					  source?: InputMaybe<OrderByEnum>;
 | 
				
			||||||
@ -771,7 +826,12 @@ export type EpisodesUpdateInput = {
 | 
				
			|||||||
  bangumiId?: InputMaybe<Scalars['Int']['input']>;
 | 
					  bangumiId?: InputMaybe<Scalars['Int']['input']>;
 | 
				
			||||||
  createdAt?: InputMaybe<Scalars['String']['input']>;
 | 
					  createdAt?: InputMaybe<Scalars['String']['input']>;
 | 
				
			||||||
  displayName?: InputMaybe<Scalars['String']['input']>;
 | 
					  displayName?: InputMaybe<Scalars['String']['input']>;
 | 
				
			||||||
 | 
					  enclosureContentLength?: InputMaybe<Scalars['Int']['input']>;
 | 
				
			||||||
 | 
					  enclosureMagnetLink?: InputMaybe<Scalars['String']['input']>;
 | 
				
			||||||
 | 
					  enclosurePubDate?: InputMaybe<Scalars['String']['input']>;
 | 
				
			||||||
 | 
					  enclosureTorrentLink?: InputMaybe<Scalars['String']['input']>;
 | 
				
			||||||
  episodeIndex?: InputMaybe<Scalars['Int']['input']>;
 | 
					  episodeIndex?: InputMaybe<Scalars['Int']['input']>;
 | 
				
			||||||
 | 
					  episodeType?: InputMaybe<EpisodeTypeEnum>;
 | 
				
			||||||
  fansub?: InputMaybe<Scalars['String']['input']>;
 | 
					  fansub?: InputMaybe<Scalars['String']['input']>;
 | 
				
			||||||
  homepage?: InputMaybe<Scalars['String']['input']>;
 | 
					  homepage?: InputMaybe<Scalars['String']['input']>;
 | 
				
			||||||
  id?: InputMaybe<Scalars['Int']['input']>;
 | 
					  id?: InputMaybe<Scalars['Int']['input']>;
 | 
				
			||||||
@ -780,7 +840,6 @@ export type EpisodesUpdateInput = {
 | 
				
			|||||||
  originPosterLink?: InputMaybe<Scalars['String']['input']>;
 | 
					  originPosterLink?: InputMaybe<Scalars['String']['input']>;
 | 
				
			||||||
  posterLink?: InputMaybe<Scalars['String']['input']>;
 | 
					  posterLink?: InputMaybe<Scalars['String']['input']>;
 | 
				
			||||||
  resolution?: InputMaybe<Scalars['String']['input']>;
 | 
					  resolution?: InputMaybe<Scalars['String']['input']>;
 | 
				
			||||||
  savePath?: InputMaybe<Scalars['String']['input']>;
 | 
					 | 
				
			||||||
  season?: InputMaybe<Scalars['Int']['input']>;
 | 
					  season?: InputMaybe<Scalars['Int']['input']>;
 | 
				
			||||||
  seasonRaw?: InputMaybe<Scalars['String']['input']>;
 | 
					  seasonRaw?: InputMaybe<Scalars['String']['input']>;
 | 
				
			||||||
  source?: InputMaybe<Scalars['String']['input']>;
 | 
					  source?: InputMaybe<Scalars['String']['input']>;
 | 
				
			||||||
@ -788,6 +847,127 @@ export type EpisodesUpdateInput = {
 | 
				
			|||||||
  updatedAt?: InputMaybe<Scalars['String']['input']>;
 | 
					  updatedAt?: InputMaybe<Scalars['String']['input']>;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const FeedSourceEnum = {
 | 
				
			||||||
 | 
					  SubscriptionEpisode: 'subscription_episode'
 | 
				
			||||||
 | 
					} as const;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export type FeedSourceEnum = typeof FeedSourceEnum[keyof typeof FeedSourceEnum];
 | 
				
			||||||
 | 
					export type FeedSourceEnumFilterInput = {
 | 
				
			||||||
 | 
					  eq?: InputMaybe<FeedSourceEnum>;
 | 
				
			||||||
 | 
					  gt?: InputMaybe<FeedSourceEnum>;
 | 
				
			||||||
 | 
					  gte?: InputMaybe<FeedSourceEnum>;
 | 
				
			||||||
 | 
					  is_in?: InputMaybe<Array<FeedSourceEnum>>;
 | 
				
			||||||
 | 
					  is_not_in?: InputMaybe<Array<FeedSourceEnum>>;
 | 
				
			||||||
 | 
					  is_not_null?: InputMaybe<FeedSourceEnum>;
 | 
				
			||||||
 | 
					  is_null?: InputMaybe<FeedSourceEnum>;
 | 
				
			||||||
 | 
					  lt?: InputMaybe<FeedSourceEnum>;
 | 
				
			||||||
 | 
					  lte?: InputMaybe<FeedSourceEnum>;
 | 
				
			||||||
 | 
					  ne?: InputMaybe<FeedSourceEnum>;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const FeedTypeEnum = {
 | 
				
			||||||
 | 
					  Rss: 'rss'
 | 
				
			||||||
 | 
					} as const;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export type FeedTypeEnum = typeof FeedTypeEnum[keyof typeof FeedTypeEnum];
 | 
				
			||||||
 | 
					export type FeedTypeEnumFilterInput = {
 | 
				
			||||||
 | 
					  eq?: InputMaybe<FeedTypeEnum>;
 | 
				
			||||||
 | 
					  gt?: InputMaybe<FeedTypeEnum>;
 | 
				
			||||||
 | 
					  gte?: InputMaybe<FeedTypeEnum>;
 | 
				
			||||||
 | 
					  is_in?: InputMaybe<Array<FeedTypeEnum>>;
 | 
				
			||||||
 | 
					  is_not_in?: InputMaybe<Array<FeedTypeEnum>>;
 | 
				
			||||||
 | 
					  is_not_null?: InputMaybe<FeedTypeEnum>;
 | 
				
			||||||
 | 
					  is_null?: InputMaybe<FeedTypeEnum>;
 | 
				
			||||||
 | 
					  lt?: InputMaybe<FeedTypeEnum>;
 | 
				
			||||||
 | 
					  lte?: InputMaybe<FeedTypeEnum>;
 | 
				
			||||||
 | 
					  ne?: InputMaybe<FeedTypeEnum>;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export type Feeds = {
 | 
				
			||||||
 | 
					  __typename?: 'Feeds';
 | 
				
			||||||
 | 
					  createdAt: Scalars['String']['output'];
 | 
				
			||||||
 | 
					  feedSource: FeedSourceEnum;
 | 
				
			||||||
 | 
					  feedType: FeedTypeEnum;
 | 
				
			||||||
 | 
					  id: Scalars['Int']['output'];
 | 
				
			||||||
 | 
					  subscriber?: Maybe<Subscribers>;
 | 
				
			||||||
 | 
					  subscriberId?: Maybe<Scalars['Int']['output']>;
 | 
				
			||||||
 | 
					  subscription?: Maybe<Subscriptions>;
 | 
				
			||||||
 | 
					  subscriptionId?: Maybe<Scalars['Int']['output']>;
 | 
				
			||||||
 | 
					  token: Scalars['String']['output'];
 | 
				
			||||||
 | 
					  updatedAt: Scalars['String']['output'];
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export type FeedsBasic = {
 | 
				
			||||||
 | 
					  __typename?: 'FeedsBasic';
 | 
				
			||||||
 | 
					  createdAt: Scalars['String']['output'];
 | 
				
			||||||
 | 
					  feedSource: FeedSourceEnum;
 | 
				
			||||||
 | 
					  feedType: FeedTypeEnum;
 | 
				
			||||||
 | 
					  id: Scalars['Int']['output'];
 | 
				
			||||||
 | 
					  subscriberId?: Maybe<Scalars['Int']['output']>;
 | 
				
			||||||
 | 
					  subscriptionId?: Maybe<Scalars['Int']['output']>;
 | 
				
			||||||
 | 
					  token: Scalars['String']['output'];
 | 
				
			||||||
 | 
					  updatedAt: Scalars['String']['output'];
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export type FeedsConnection = {
 | 
				
			||||||
 | 
					  __typename?: 'FeedsConnection';
 | 
				
			||||||
 | 
					  edges: Array<FeedsEdge>;
 | 
				
			||||||
 | 
					  nodes: Array<Feeds>;
 | 
				
			||||||
 | 
					  pageInfo: PageInfo;
 | 
				
			||||||
 | 
					  paginationInfo?: Maybe<PaginationInfo>;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export type FeedsEdge = {
 | 
				
			||||||
 | 
					  __typename?: 'FeedsEdge';
 | 
				
			||||||
 | 
					  cursor: Scalars['String']['output'];
 | 
				
			||||||
 | 
					  node: Feeds;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export type FeedsFilterInput = {
 | 
				
			||||||
 | 
					  and?: InputMaybe<Array<FeedsFilterInput>>;
 | 
				
			||||||
 | 
					  createdAt?: InputMaybe<TextFilterInput>;
 | 
				
			||||||
 | 
					  feedSource?: InputMaybe<FeedSourceEnumFilterInput>;
 | 
				
			||||||
 | 
					  feedType?: InputMaybe<FeedTypeEnumFilterInput>;
 | 
				
			||||||
 | 
					  id?: InputMaybe<IntegerFilterInput>;
 | 
				
			||||||
 | 
					  or?: InputMaybe<Array<FeedsFilterInput>>;
 | 
				
			||||||
 | 
					  subscriberId?: InputMaybe<SubscriberIdFilterInput>;
 | 
				
			||||||
 | 
					  subscriptionId?: InputMaybe<IntegerFilterInput>;
 | 
				
			||||||
 | 
					  token?: InputMaybe<StringFilterInput>;
 | 
				
			||||||
 | 
					  updatedAt?: InputMaybe<TextFilterInput>;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export type FeedsInsertInput = {
 | 
				
			||||||
 | 
					  createdAt?: InputMaybe<Scalars['String']['input']>;
 | 
				
			||||||
 | 
					  feedSource: FeedSourceEnum;
 | 
				
			||||||
 | 
					  feedType: FeedTypeEnum;
 | 
				
			||||||
 | 
					  id?: InputMaybe<Scalars['Int']['input']>;
 | 
				
			||||||
 | 
					  subscriberId?: InputMaybe<Scalars['Int']['input']>;
 | 
				
			||||||
 | 
					  subscriptionId?: InputMaybe<Scalars['Int']['input']>;
 | 
				
			||||||
 | 
					  token?: InputMaybe<Scalars['String']['input']>;
 | 
				
			||||||
 | 
					  updatedAt?: InputMaybe<Scalars['String']['input']>;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export type FeedsOrderInput = {
 | 
				
			||||||
 | 
					  createdAt?: InputMaybe<OrderByEnum>;
 | 
				
			||||||
 | 
					  feedSource?: InputMaybe<OrderByEnum>;
 | 
				
			||||||
 | 
					  feedType?: InputMaybe<OrderByEnum>;
 | 
				
			||||||
 | 
					  id?: InputMaybe<OrderByEnum>;
 | 
				
			||||||
 | 
					  subscriberId?: InputMaybe<OrderByEnum>;
 | 
				
			||||||
 | 
					  subscriptionId?: InputMaybe<OrderByEnum>;
 | 
				
			||||||
 | 
					  token?: InputMaybe<OrderByEnum>;
 | 
				
			||||||
 | 
					  updatedAt?: InputMaybe<OrderByEnum>;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export type FeedsUpdateInput = {
 | 
				
			||||||
 | 
					  createdAt?: InputMaybe<Scalars['String']['input']>;
 | 
				
			||||||
 | 
					  feedSource?: InputMaybe<FeedSourceEnum>;
 | 
				
			||||||
 | 
					  feedType?: InputMaybe<FeedTypeEnum>;
 | 
				
			||||||
 | 
					  id?: InputMaybe<Scalars['Int']['input']>;
 | 
				
			||||||
 | 
					  subscriptionId?: InputMaybe<Scalars['Int']['input']>;
 | 
				
			||||||
 | 
					  token?: InputMaybe<Scalars['String']['input']>;
 | 
				
			||||||
 | 
					  updatedAt?: InputMaybe<Scalars['String']['input']>;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export type IntegerFilterInput = {
 | 
					export type IntegerFilterInput = {
 | 
				
			||||||
  between?: InputMaybe<Array<Scalars['Int']['input']>>;
 | 
					  between?: InputMaybe<Array<Scalars['Int']['input']>>;
 | 
				
			||||||
  eq?: InputMaybe<Scalars['Int']['input']>;
 | 
					  eq?: InputMaybe<Scalars['Int']['input']>;
 | 
				
			||||||
@ -826,6 +1006,10 @@ export type Mutation = {
 | 
				
			|||||||
  episodesCreateOne: EpisodesBasic;
 | 
					  episodesCreateOne: EpisodesBasic;
 | 
				
			||||||
  episodesDelete: Scalars['Int']['output'];
 | 
					  episodesDelete: Scalars['Int']['output'];
 | 
				
			||||||
  episodesUpdate: Array<EpisodesBasic>;
 | 
					  episodesUpdate: Array<EpisodesBasic>;
 | 
				
			||||||
 | 
					  feedsCreateBatch: Array<FeedsBasic>;
 | 
				
			||||||
 | 
					  feedsCreateOne: FeedsBasic;
 | 
				
			||||||
 | 
					  feedsDelete: Scalars['Int']['output'];
 | 
				
			||||||
 | 
					  feedsUpdate: Array<FeedsBasic>;
 | 
				
			||||||
  subscriberTasksDelete: Scalars['Int']['output'];
 | 
					  subscriberTasksDelete: Scalars['Int']['output'];
 | 
				
			||||||
  subscriberTasksRetryOne: SubscriberTasks;
 | 
					  subscriberTasksRetryOne: SubscriberTasks;
 | 
				
			||||||
  subscriptionBangumiCreateBatch: Array<SubscriptionBangumiBasic>;
 | 
					  subscriptionBangumiCreateBatch: Array<SubscriptionBangumiBasic>;
 | 
				
			||||||
@ -951,6 +1135,27 @@ export type MutationEpisodesUpdateArgs = {
 | 
				
			|||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export type MutationFeedsCreateBatchArgs = {
 | 
				
			||||||
 | 
					  data: Array<FeedsInsertInput>;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export type MutationFeedsCreateOneArgs = {
 | 
				
			||||||
 | 
					  data: FeedsInsertInput;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export type MutationFeedsDeleteArgs = {
 | 
				
			||||||
 | 
					  filter?: InputMaybe<FeedsFilterInput>;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export type MutationFeedsUpdateArgs = {
 | 
				
			||||||
 | 
					  data: FeedsUpdateInput;
 | 
				
			||||||
 | 
					  filter?: InputMaybe<FeedsFilterInput>;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export type MutationSubscriberTasksDeleteArgs = {
 | 
					export type MutationSubscriberTasksDeleteArgs = {
 | 
				
			||||||
  filter?: InputMaybe<SubscriberTasksFilterInput>;
 | 
					  filter?: InputMaybe<SubscriberTasksFilterInput>;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
@ -1085,6 +1290,7 @@ export type Query = {
 | 
				
			|||||||
  downloaders: DownloadersConnection;
 | 
					  downloaders: DownloadersConnection;
 | 
				
			||||||
  downloads: DownloadsConnection;
 | 
					  downloads: DownloadsConnection;
 | 
				
			||||||
  episodes: EpisodesConnection;
 | 
					  episodes: EpisodesConnection;
 | 
				
			||||||
 | 
					  feeds: FeedsConnection;
 | 
				
			||||||
  subscriberTasks: SubscriberTasksConnection;
 | 
					  subscriberTasks: SubscriberTasksConnection;
 | 
				
			||||||
  subscribers: SubscribersConnection;
 | 
					  subscribers: SubscribersConnection;
 | 
				
			||||||
  subscriptionBangumi: SubscriptionBangumiConnection;
 | 
					  subscriptionBangumi: SubscriptionBangumiConnection;
 | 
				
			||||||
@ -1138,6 +1344,13 @@ export type QueryEpisodesArgs = {
 | 
				
			|||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export type QueryFeedsArgs = {
 | 
				
			||||||
 | 
					  filters?: InputMaybe<FeedsFilterInput>;
 | 
				
			||||||
 | 
					  orderBy?: InputMaybe<FeedsOrderInput>;
 | 
				
			||||||
 | 
					  pagination?: InputMaybe<PaginationInput>;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export type QuerySubscriberTasksArgs = {
 | 
					export type QuerySubscriberTasksArgs = {
 | 
				
			||||||
  filters?: InputMaybe<SubscriberTasksFilterInput>;
 | 
					  filters?: InputMaybe<SubscriberTasksFilterInput>;
 | 
				
			||||||
  orderBy?: InputMaybe<SubscriberTasksOrderInput>;
 | 
					  orderBy?: InputMaybe<SubscriberTasksOrderInput>;
 | 
				
			||||||
@ -1288,7 +1501,9 @@ export type Subscribers = {
 | 
				
			|||||||
  displayName: Scalars['String']['output'];
 | 
					  displayName: Scalars['String']['output'];
 | 
				
			||||||
  downloader: DownloadersConnection;
 | 
					  downloader: DownloadersConnection;
 | 
				
			||||||
  episode: EpisodesConnection;
 | 
					  episode: EpisodesConnection;
 | 
				
			||||||
 | 
					  feed: FeedsConnection;
 | 
				
			||||||
  id: Scalars['Int']['output'];
 | 
					  id: Scalars['Int']['output'];
 | 
				
			||||||
 | 
					  subscriberTask: SubscriberTasksConnection;
 | 
				
			||||||
  subscription: SubscriptionsConnection;
 | 
					  subscription: SubscriptionsConnection;
 | 
				
			||||||
  updatedAt: Scalars['String']['output'];
 | 
					  updatedAt: Scalars['String']['output'];
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
@ -1322,6 +1537,20 @@ export type SubscribersEpisodeArgs = {
 | 
				
			|||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export type SubscribersFeedArgs = {
 | 
				
			||||||
 | 
					  filters?: InputMaybe<FeedsFilterInput>;
 | 
				
			||||||
 | 
					  orderBy?: InputMaybe<FeedsOrderInput>;
 | 
				
			||||||
 | 
					  pagination?: InputMaybe<PaginationInput>;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export type SubscribersSubscriberTaskArgs = {
 | 
				
			||||||
 | 
					  filters?: InputMaybe<SubscriberTasksFilterInput>;
 | 
				
			||||||
 | 
					  orderBy?: InputMaybe<SubscriberTasksOrderInput>;
 | 
				
			||||||
 | 
					  pagination?: InputMaybe<PaginationInput>;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export type SubscribersSubscriptionArgs = {
 | 
					export type SubscribersSubscriptionArgs = {
 | 
				
			||||||
  filters?: InputMaybe<SubscriptionsFilterInput>;
 | 
					  filters?: InputMaybe<SubscriptionsFilterInput>;
 | 
				
			||||||
  orderBy?: InputMaybe<SubscriptionsOrderInput>;
 | 
					  orderBy?: InputMaybe<SubscriptionsOrderInput>;
 | 
				
			||||||
@ -1511,6 +1740,7 @@ export type Subscriptions = {
 | 
				
			|||||||
  displayName: Scalars['String']['output'];
 | 
					  displayName: Scalars['String']['output'];
 | 
				
			||||||
  enabled: Scalars['Boolean']['output'];
 | 
					  enabled: Scalars['Boolean']['output'];
 | 
				
			||||||
  episode: EpisodesConnection;
 | 
					  episode: EpisodesConnection;
 | 
				
			||||||
 | 
					  feed: FeedsConnection;
 | 
				
			||||||
  id: Scalars['Int']['output'];
 | 
					  id: Scalars['Int']['output'];
 | 
				
			||||||
  sourceUrl: Scalars['String']['output'];
 | 
					  sourceUrl: Scalars['String']['output'];
 | 
				
			||||||
  subscriber?: Maybe<Subscribers>;
 | 
					  subscriber?: Maybe<Subscribers>;
 | 
				
			||||||
@ -1535,6 +1765,13 @@ export type SubscriptionsEpisodeArgs = {
 | 
				
			|||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export type SubscriptionsFeedArgs = {
 | 
				
			||||||
 | 
					  filters?: InputMaybe<FeedsFilterInput>;
 | 
				
			||||||
 | 
					  orderBy?: InputMaybe<FeedsOrderInput>;
 | 
				
			||||||
 | 
					  pagination?: InputMaybe<PaginationInput>;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export type SubscriptionsSubscriptionBangumiArgs = {
 | 
					export type SubscriptionsSubscriptionBangumiArgs = {
 | 
				
			||||||
  filters?: InputMaybe<SubscriptionBangumiFilterInput>;
 | 
					  filters?: InputMaybe<SubscriptionBangumiFilterInput>;
 | 
				
			||||||
  orderBy?: InputMaybe<SubscriptionBangumiOrderInput>;
 | 
					  orderBy?: InputMaybe<SubscriptionBangumiOrderInput>;
 | 
				
			||||||
@ -1684,6 +1921,20 @@ export type CheckCredential3rdAvailableQueryVariables = Exact<{
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
export type CheckCredential3rdAvailableQuery = { __typename?: 'Query', credential3rdCheckAvailable: { __typename?: 'Credential3rdCheckAvailableInfo', available: boolean } };
 | 
					export type CheckCredential3rdAvailableQuery = { __typename?: 'Query', credential3rdCheckAvailable: { __typename?: 'Credential3rdCheckAvailableInfo', available: boolean } };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export type InsertFeedMutationVariables = Exact<{
 | 
				
			||||||
 | 
					  data: FeedsInsertInput;
 | 
				
			||||||
 | 
					}>;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export type InsertFeedMutation = { __typename?: 'Mutation', feedsCreateOne: { __typename?: 'FeedsBasic', id: number, createdAt: string, updatedAt: string, feedType: FeedTypeEnum, token: string } };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export type DeleteFeedMutationVariables = Exact<{
 | 
				
			||||||
 | 
					  filters: FeedsFilterInput;
 | 
				
			||||||
 | 
					}>;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export type DeleteFeedMutation = { __typename?: 'Mutation', feedsDelete: number };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export type GetSubscriptionsQueryVariables = Exact<{
 | 
					export type GetSubscriptionsQueryVariables = Exact<{
 | 
				
			||||||
  filters: SubscriptionsFilterInput;
 | 
					  filters: SubscriptionsFilterInput;
 | 
				
			||||||
  orderBy: SubscriptionsOrderInput;
 | 
					  orderBy: SubscriptionsOrderInput;
 | 
				
			||||||
@ -1720,7 +1971,7 @@ export type GetSubscriptionDetailQueryVariables = Exact<{
 | 
				
			|||||||
}>;
 | 
					}>;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export type GetSubscriptionDetailQuery = { __typename?: 'Query', subscriptions: { __typename?: 'SubscriptionsConnection', nodes: Array<{ __typename?: 'Subscriptions', id: number, displayName: string, createdAt: string, updatedAt: string, category: SubscriptionCategoryEnum, sourceUrl: string, enabled: boolean, credential3rd?: { __typename?: 'Credential3rd', id: number, username?: string | null } | null, bangumi: { __typename?: 'BangumiConnection', nodes: Array<{ __typename?: 'Bangumi', createdAt: string, updatedAt: string, id: number, mikanBangumiId?: string | null, displayName: string, season: number, seasonRaw?: string | null, fansub?: string | null, mikanFansubId?: string | null, rssLink?: string | null, posterLink?: string | null, savePath?: string | null, homepage?: string | null }> } }> } };
 | 
					export type GetSubscriptionDetailQuery = { __typename?: 'Query', subscriptions: { __typename?: 'SubscriptionsConnection', nodes: Array<{ __typename?: 'Subscriptions', id: number, displayName: string, createdAt: string, updatedAt: string, category: SubscriptionCategoryEnum, sourceUrl: string, enabled: boolean, feed: { __typename?: 'FeedsConnection', nodes: Array<{ __typename?: 'Feeds', id: number, createdAt: string, updatedAt: string, token: string, feedType: FeedTypeEnum, feedSource: FeedSourceEnum }> }, credential3rd?: { __typename?: 'Credential3rd', id: number, username?: string | null } | null, bangumi: { __typename?: 'BangumiConnection', nodes: Array<{ __typename?: 'Bangumi', createdAt: string, updatedAt: string, id: number, mikanBangumiId?: string | null, displayName: string, season: number, seasonRaw?: string | null, fansub?: string | null, mikanFansubId?: string | null, rssLink?: string | null, posterLink?: string | null, homepage?: string | null }> } }> } };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export type SyncSubscriptionFeedsIncrementalMutationVariables = Exact<{
 | 
					export type SyncSubscriptionFeedsIncrementalMutationVariables = Exact<{
 | 
				
			||||||
  filter: SubscriptionsFilterInput;
 | 
					  filter: SubscriptionsFilterInput;
 | 
				
			||||||
@ -1773,11 +2024,13 @@ export const UpdateCredential3rdDocument = {"kind":"Document","definitions":[{"k
 | 
				
			|||||||
export const DeleteCredential3rdDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"DeleteCredential3rd"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"filters"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Credential3rdFilterInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"credential3rdDelete"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"filter"},"value":{"kind":"Variable","name":{"kind":"Name","value":"filters"}}}]}]}}]} as unknown as DocumentNode<DeleteCredential3rdMutation, DeleteCredential3rdMutationVariables>;
 | 
					export const DeleteCredential3rdDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"DeleteCredential3rd"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"filters"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Credential3rdFilterInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"credential3rdDelete"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"filter"},"value":{"kind":"Variable","name":{"kind":"Name","value":"filters"}}}]}]}}]} as unknown as DocumentNode<DeleteCredential3rdMutation, DeleteCredential3rdMutationVariables>;
 | 
				
			||||||
export const GetCredential3rdDetailDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetCredential3rdDetail"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"credential3rd"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"filters"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"id"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"eq"},"value":{"kind":"Variable","name":{"kind":"Name","value":"id"}}}]}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"nodes"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"cookies"}},{"kind":"Field","name":{"kind":"Name","value":"username"}},{"kind":"Field","name":{"kind":"Name","value":"password"}},{"kind":"Field","name":{"kind":"Name","value":"userAgent"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"credentialType"}}]}}]}}]}}]} as unknown as DocumentNode<GetCredential3rdDetailQuery, GetCredential3rdDetailQueryVariables>;
 | 
					export const GetCredential3rdDetailDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetCredential3rdDetail"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"credential3rd"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"filters"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"id"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"eq"},"value":{"kind":"Variable","name":{"kind":"Name","value":"id"}}}]}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"nodes"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"cookies"}},{"kind":"Field","name":{"kind":"Name","value":"username"}},{"kind":"Field","name":{"kind":"Name","value":"password"}},{"kind":"Field","name":{"kind":"Name","value":"userAgent"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"credentialType"}}]}}]}}]}}]} as unknown as DocumentNode<GetCredential3rdDetailQuery, GetCredential3rdDetailQueryVariables>;
 | 
				
			||||||
export const CheckCredential3rdAvailableDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"CheckCredential3rdAvailable"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"credential3rdCheckAvailable"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"filter"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"id"}}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"available"}}]}}]}}]} as unknown as DocumentNode<CheckCredential3rdAvailableQuery, CheckCredential3rdAvailableQueryVariables>;
 | 
					export const CheckCredential3rdAvailableDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"CheckCredential3rdAvailable"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"credential3rdCheckAvailable"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"filter"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"id"}}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"available"}}]}}]}}]} as unknown as DocumentNode<CheckCredential3rdAvailableQuery, CheckCredential3rdAvailableQueryVariables>;
 | 
				
			||||||
 | 
					export const InsertFeedDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"InsertFeed"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"data"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"FeedsInsertInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"feedsCreateOne"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"data"},"value":{"kind":"Variable","name":{"kind":"Name","value":"data"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"feedType"}},{"kind":"Field","name":{"kind":"Name","value":"token"}}]}}]}}]} as unknown as DocumentNode<InsertFeedMutation, InsertFeedMutationVariables>;
 | 
				
			||||||
 | 
					export const DeleteFeedDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"DeleteFeed"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"filters"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"FeedsFilterInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"feedsDelete"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"filter"},"value":{"kind":"Variable","name":{"kind":"Name","value":"filters"}}}]}]}}]} as unknown as DocumentNode<DeleteFeedMutation, DeleteFeedMutationVariables>;
 | 
				
			||||||
export const GetSubscriptionsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetSubscriptions"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"filters"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"SubscriptionsFilterInput"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"orderBy"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"SubscriptionsOrderInput"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"pagination"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"PaginationInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"subscriptions"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"pagination"},"value":{"kind":"Variable","name":{"kind":"Name","value":"pagination"}}},{"kind":"Argument","name":{"kind":"Name","value":"filters"},"value":{"kind":"Variable","name":{"kind":"Name","value":"filters"}}},{"kind":"Argument","name":{"kind":"Name","value":"orderBy"},"value":{"kind":"Variable","name":{"kind":"Name","value":"orderBy"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"nodes"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"displayName"}},{"kind":"Field","name":{"kind":"Name","value":"category"}},{"kind":"Field","name":{"kind":"Name","value":"sourceUrl"}},{"kind":"Field","name":{"kind":"Name","value":"enabled"}},{"kind":"Field","name":{"kind":"Name","value":"credentialId"}}]}},{"kind":"Field","name":{"kind":"Name","value":"paginationInfo"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"total"}},{"kind":"Field","name":{"kind":"Name","value":"pages"}}]}}]}}]}}]} as unknown as DocumentNode<GetSubscriptionsQuery, GetSubscriptionsQueryVariables>;
 | 
					export const GetSubscriptionsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetSubscriptions"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"filters"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"SubscriptionsFilterInput"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"orderBy"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"SubscriptionsOrderInput"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"pagination"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"PaginationInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"subscriptions"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"pagination"},"value":{"kind":"Variable","name":{"kind":"Name","value":"pagination"}}},{"kind":"Argument","name":{"kind":"Name","value":"filters"},"value":{"kind":"Variable","name":{"kind":"Name","value":"filters"}}},{"kind":"Argument","name":{"kind":"Name","value":"orderBy"},"value":{"kind":"Variable","name":{"kind":"Name","value":"orderBy"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"nodes"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"displayName"}},{"kind":"Field","name":{"kind":"Name","value":"category"}},{"kind":"Field","name":{"kind":"Name","value":"sourceUrl"}},{"kind":"Field","name":{"kind":"Name","value":"enabled"}},{"kind":"Field","name":{"kind":"Name","value":"credentialId"}}]}},{"kind":"Field","name":{"kind":"Name","value":"paginationInfo"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"total"}},{"kind":"Field","name":{"kind":"Name","value":"pages"}}]}}]}}]}}]} as unknown as DocumentNode<GetSubscriptionsQuery, GetSubscriptionsQueryVariables>;
 | 
				
			||||||
export const InsertSubscriptionDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"InsertSubscription"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"data"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"SubscriptionsInsertInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"subscriptionsCreateOne"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"data"},"value":{"kind":"Variable","name":{"kind":"Name","value":"data"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"displayName"}},{"kind":"Field","name":{"kind":"Name","value":"category"}},{"kind":"Field","name":{"kind":"Name","value":"sourceUrl"}},{"kind":"Field","name":{"kind":"Name","value":"enabled"}},{"kind":"Field","name":{"kind":"Name","value":"credentialId"}}]}}]}}]} as unknown as DocumentNode<InsertSubscriptionMutation, InsertSubscriptionMutationVariables>;
 | 
					export const InsertSubscriptionDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"InsertSubscription"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"data"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"SubscriptionsInsertInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"subscriptionsCreateOne"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"data"},"value":{"kind":"Variable","name":{"kind":"Name","value":"data"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"displayName"}},{"kind":"Field","name":{"kind":"Name","value":"category"}},{"kind":"Field","name":{"kind":"Name","value":"sourceUrl"}},{"kind":"Field","name":{"kind":"Name","value":"enabled"}},{"kind":"Field","name":{"kind":"Name","value":"credentialId"}}]}}]}}]} as unknown as DocumentNode<InsertSubscriptionMutation, InsertSubscriptionMutationVariables>;
 | 
				
			||||||
export const UpdateSubscriptionsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"UpdateSubscriptions"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"data"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"SubscriptionsUpdateInput"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"filters"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"SubscriptionsFilterInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"subscriptionsUpdate"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"data"},"value":{"kind":"Variable","name":{"kind":"Name","value":"data"}}},{"kind":"Argument","name":{"kind":"Name","value":"filter"},"value":{"kind":"Variable","name":{"kind":"Name","value":"filters"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"displayName"}},{"kind":"Field","name":{"kind":"Name","value":"category"}},{"kind":"Field","name":{"kind":"Name","value":"sourceUrl"}},{"kind":"Field","name":{"kind":"Name","value":"enabled"}}]}}]}}]} as unknown as DocumentNode<UpdateSubscriptionsMutation, UpdateSubscriptionsMutationVariables>;
 | 
					export const UpdateSubscriptionsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"UpdateSubscriptions"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"data"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"SubscriptionsUpdateInput"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"filters"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"SubscriptionsFilterInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"subscriptionsUpdate"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"data"},"value":{"kind":"Variable","name":{"kind":"Name","value":"data"}}},{"kind":"Argument","name":{"kind":"Name","value":"filter"},"value":{"kind":"Variable","name":{"kind":"Name","value":"filters"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"displayName"}},{"kind":"Field","name":{"kind":"Name","value":"category"}},{"kind":"Field","name":{"kind":"Name","value":"sourceUrl"}},{"kind":"Field","name":{"kind":"Name","value":"enabled"}}]}}]}}]} as unknown as DocumentNode<UpdateSubscriptionsMutation, UpdateSubscriptionsMutationVariables>;
 | 
				
			||||||
export const DeleteSubscriptionsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"DeleteSubscriptions"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"filters"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"SubscriptionsFilterInput"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"subscriptionsDelete"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"filter"},"value":{"kind":"Variable","name":{"kind":"Name","value":"filters"}}}]}]}}]} as unknown as DocumentNode<DeleteSubscriptionsMutation, DeleteSubscriptionsMutationVariables>;
 | 
					export const DeleteSubscriptionsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"DeleteSubscriptions"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"filters"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"SubscriptionsFilterInput"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"subscriptionsDelete"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"filter"},"value":{"kind":"Variable","name":{"kind":"Name","value":"filters"}}}]}]}}]} as unknown as DocumentNode<DeleteSubscriptionsMutation, DeleteSubscriptionsMutationVariables>;
 | 
				
			||||||
export const GetSubscriptionDetailDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetSubscriptionDetail"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"subscriptions"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"filters"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"id"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"eq"},"value":{"kind":"Variable","name":{"kind":"Name","value":"id"}}}]}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"nodes"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"displayName"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"category"}},{"kind":"Field","name":{"kind":"Name","value":"sourceUrl"}},{"kind":"Field","name":{"kind":"Name","value":"enabled"}},{"kind":"Field","name":{"kind":"Name","value":"credential3rd"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"username"}}]}},{"kind":"Field","name":{"kind":"Name","value":"bangumi"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"nodes"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"mikanBangumiId"}},{"kind":"Field","name":{"kind":"Name","value":"displayName"}},{"kind":"Field","name":{"kind":"Name","value":"season"}},{"kind":"Field","name":{"kind":"Name","value":"seasonRaw"}},{"kind":"Field","name":{"kind":"Name","value":"fansub"}},{"kind":"Field","name":{"kind":"Name","value":"mikanFansubId"}},{"kind":"Field","name":{"kind":"Name","value":"rssLink"}},{"kind":"Field","name":{"kind":"Name","value":"posterLink"}},{"kind":"Field","name":{"kind":"Name","value":"savePath"}},{"kind":"Field","name":{"kind":"Name","value":"homepage"}}]}}]}}]}}]}}]}}]} as unknown as DocumentNode<GetSubscriptionDetailQuery, GetSubscriptionDetailQueryVariables>;
 | 
					export const GetSubscriptionDetailDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetSubscriptionDetail"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"subscriptions"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"filters"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"id"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"eq"},"value":{"kind":"Variable","name":{"kind":"Name","value":"id"}}}]}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"nodes"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"displayName"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"category"}},{"kind":"Field","name":{"kind":"Name","value":"sourceUrl"}},{"kind":"Field","name":{"kind":"Name","value":"enabled"}},{"kind":"Field","name":{"kind":"Name","value":"feed"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"nodes"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"token"}},{"kind":"Field","name":{"kind":"Name","value":"feedType"}},{"kind":"Field","name":{"kind":"Name","value":"feedSource"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"credential3rd"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"username"}}]}},{"kind":"Field","name":{"kind":"Name","value":"bangumi"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"nodes"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"mikanBangumiId"}},{"kind":"Field","name":{"kind":"Name","value":"displayName"}},{"kind":"Field","name":{"kind":"Name","value":"season"}},{"kind":"Field","name":{"kind":"Name","value":"seasonRaw"}},{"kind":"Field","name":{"kind":"Name","value":"fansub"}},{"kind":"Field","name":{"kind":"Name","value":"mikanFansubId"}},{"kind":"Field","name":{"kind":"Name","value":"rssLink"}},{"kind":"Field","name":{"kind":"Name","value":"posterLink"}},{"kind":"Field","name":{"kind":"Name","value":"homepage"}}]}}]}}]}}]}}]}}]} as unknown as DocumentNode<GetSubscriptionDetailQuery, GetSubscriptionDetailQueryVariables>;
 | 
				
			||||||
export const SyncSubscriptionFeedsIncrementalDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"SyncSubscriptionFeedsIncremental"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"filter"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"SubscriptionsFilterInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"subscriptionsSyncOneFeedsIncremental"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"filter"},"value":{"kind":"Variable","name":{"kind":"Name","value":"filter"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]}}]} as unknown as DocumentNode<SyncSubscriptionFeedsIncrementalMutation, SyncSubscriptionFeedsIncrementalMutationVariables>;
 | 
					export const SyncSubscriptionFeedsIncrementalDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"SyncSubscriptionFeedsIncremental"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"filter"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"SubscriptionsFilterInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"subscriptionsSyncOneFeedsIncremental"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"filter"},"value":{"kind":"Variable","name":{"kind":"Name","value":"filter"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]}}]} as unknown as DocumentNode<SyncSubscriptionFeedsIncrementalMutation, SyncSubscriptionFeedsIncrementalMutationVariables>;
 | 
				
			||||||
export const SyncSubscriptionFeedsFullDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"SyncSubscriptionFeedsFull"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"filter"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"SubscriptionsFilterInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"subscriptionsSyncOneFeedsFull"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"filter"},"value":{"kind":"Variable","name":{"kind":"Name","value":"filter"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]}}]} as unknown as DocumentNode<SyncSubscriptionFeedsFullMutation, SyncSubscriptionFeedsFullMutationVariables>;
 | 
					export const SyncSubscriptionFeedsFullDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"SyncSubscriptionFeedsFull"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"filter"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"SubscriptionsFilterInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"subscriptionsSyncOneFeedsFull"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"filter"},"value":{"kind":"Variable","name":{"kind":"Name","value":"filter"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]}}]} as unknown as DocumentNode<SyncSubscriptionFeedsFullMutation, SyncSubscriptionFeedsFullMutationVariables>;
 | 
				
			||||||
export const SyncSubscriptionSourcesDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"SyncSubscriptionSources"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"filter"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"SubscriptionsFilterInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"subscriptionsSyncOneSources"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"filter"},"value":{"kind":"Variable","name":{"kind":"Name","value":"filter"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]}}]} as unknown as DocumentNode<SyncSubscriptionSourcesMutation, SyncSubscriptionSourcesMutationVariables>;
 | 
					export const SyncSubscriptionSourcesDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"SyncSubscriptionSources"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"filter"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"SubscriptionsFilterInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"subscriptionsSyncOneSources"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"filter"},"value":{"kind":"Variable","name":{"kind":"Name","value":"filter"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]}}]} as unknown as DocumentNode<SyncSubscriptionSourcesMutation, SyncSubscriptionSourcesMutationVariables>;
 | 
				
			||||||
 | 
				
			|||||||
@ -14,6 +14,7 @@ import { Img } from '@/components/ui/img';
 | 
				
			|||||||
import { Label } from '@/components/ui/label';
 | 
					import { Label } from '@/components/ui/label';
 | 
				
			||||||
import { QueryErrorView } from '@/components/ui/query-error-view';
 | 
					import { QueryErrorView } from '@/components/ui/query-error-view';
 | 
				
			||||||
import { Separator } from '@/components/ui/separator';
 | 
					import { Separator } from '@/components/ui/separator';
 | 
				
			||||||
 | 
					import { DELETE_FEED, INSERT_FEED } from '@/domains/recorder/schema/feeds';
 | 
				
			||||||
import { GET_SUBSCRIPTION_DETAIL } from '@/domains/recorder/schema/subscriptions';
 | 
					import { GET_SUBSCRIPTION_DETAIL } from '@/domains/recorder/schema/subscriptions';
 | 
				
			||||||
import { SubscriptionService } from '@/domains/recorder/services/subscription.service';
 | 
					import { SubscriptionService } from '@/domains/recorder/services/subscription.service';
 | 
				
			||||||
import { useInject } from '@/infra/di/inject';
 | 
					import { useInject } from '@/infra/di/inject';
 | 
				
			||||||
@ -22,10 +23,16 @@ import {
 | 
				
			|||||||
  getApolloQueryError,
 | 
					  getApolloQueryError,
 | 
				
			||||||
} from '@/infra/errors/apollo';
 | 
					} from '@/infra/errors/apollo';
 | 
				
			||||||
import {
 | 
					import {
 | 
				
			||||||
 | 
					  type DeleteFeedMutation,
 | 
				
			||||||
 | 
					  type DeleteFeedMutationVariables,
 | 
				
			||||||
 | 
					  FeedSourceEnum,
 | 
				
			||||||
 | 
					  FeedTypeEnum,
 | 
				
			||||||
  type GetSubscriptionDetailQuery,
 | 
					  type GetSubscriptionDetailQuery,
 | 
				
			||||||
 | 
					  type InsertFeedMutation,
 | 
				
			||||||
 | 
					  type InsertFeedMutationVariables,
 | 
				
			||||||
  SubscriptionCategoryEnum,
 | 
					  SubscriptionCategoryEnum,
 | 
				
			||||||
} from '@/infra/graphql/gql/graphql';
 | 
					} from '@/infra/graphql/gql/graphql';
 | 
				
			||||||
import { useQuery } from '@apollo/client';
 | 
					import { useMutation, useQuery } from '@apollo/client';
 | 
				
			||||||
import {
 | 
					import {
 | 
				
			||||||
  createFileRoute,
 | 
					  createFileRoute,
 | 
				
			||||||
  useCanGoBack,
 | 
					  useCanGoBack,
 | 
				
			||||||
@ -38,7 +45,9 @@ import {
 | 
				
			|||||||
  Edit,
 | 
					  Edit,
 | 
				
			||||||
  ExternalLink,
 | 
					  ExternalLink,
 | 
				
			||||||
  ListIcon,
 | 
					  ListIcon,
 | 
				
			||||||
 | 
					  PlusIcon,
 | 
				
			||||||
  RefreshCcwIcon,
 | 
					  RefreshCcwIcon,
 | 
				
			||||||
 | 
					  Trash2,
 | 
				
			||||||
} from 'lucide-react';
 | 
					} from 'lucide-react';
 | 
				
			||||||
import { useMemo } from 'react';
 | 
					import { useMemo } from 'react';
 | 
				
			||||||
import { toast } from 'sonner';
 | 
					import { toast } from 'sonner';
 | 
				
			||||||
@ -91,6 +100,50 @@ function SubscriptionDetailRouteComponent() {
 | 
				
			|||||||
    });
 | 
					    });
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  const [insertFeed] = useMutation<
 | 
				
			||||||
 | 
					    InsertFeedMutation,
 | 
				
			||||||
 | 
					    InsertFeedMutationVariables
 | 
				
			||||||
 | 
					  >(INSERT_FEED, {
 | 
				
			||||||
 | 
					    onCompleted: async () => {
 | 
				
			||||||
 | 
					      const result = await refetch();
 | 
				
			||||||
 | 
					      const error = getApolloQueryError(result);
 | 
				
			||||||
 | 
					      if (error) {
 | 
				
			||||||
 | 
					        toast.error('Failed to add feed', {
 | 
				
			||||||
 | 
					          description: apolloErrorToMessage(error),
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      toast.success('Feed added');
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    onError: (error) => {
 | 
				
			||||||
 | 
					      toast.error('Failed to add feed', {
 | 
				
			||||||
 | 
					        description: apolloErrorToMessage(error),
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  const [deleteFeed] = useMutation<
 | 
				
			||||||
 | 
					    DeleteFeedMutation,
 | 
				
			||||||
 | 
					    DeleteFeedMutationVariables
 | 
				
			||||||
 | 
					  >(DELETE_FEED, {
 | 
				
			||||||
 | 
					    onCompleted: async () => {
 | 
				
			||||||
 | 
					      const result = await refetch();
 | 
				
			||||||
 | 
					      const error = getApolloQueryError(result);
 | 
				
			||||||
 | 
					      if (error) {
 | 
				
			||||||
 | 
					        toast.error('Failed to delete feed', {
 | 
				
			||||||
 | 
					          description: apolloErrorToMessage(error),
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      toast.success('Feed deleted');
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    onError: (error) => {
 | 
				
			||||||
 | 
					      toast.error('Failed to delete feed', {
 | 
				
			||||||
 | 
					        description: apolloErrorToMessage(error),
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const subscription = data?.subscriptions?.nodes?.[0];
 | 
					  const subscription = data?.subscriptions?.nodes?.[0];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const sourceUrlMeta = useMemo(
 | 
					  const sourceUrlMeta = useMemo(
 | 
				
			||||||
@ -314,6 +367,85 @@ function SubscriptionDetailRouteComponent() {
 | 
				
			|||||||
              </div>
 | 
					              </div>
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <Separator />
 | 
				
			||||||
 | 
					            <div className="space-y-4">
 | 
				
			||||||
 | 
					              <div className="flex items-center justify-between">
 | 
				
			||||||
 | 
					                <Label className="font-medium text-sm">Associated Feeds</Label>
 | 
				
			||||||
 | 
					                <Button
 | 
				
			||||||
 | 
					                  variant="outline"
 | 
				
			||||||
 | 
					                  size="sm"
 | 
				
			||||||
 | 
					                  onClick={() =>
 | 
				
			||||||
 | 
					                    insertFeed({
 | 
				
			||||||
 | 
					                      variables: {
 | 
				
			||||||
 | 
					                        data: {
 | 
				
			||||||
 | 
					                          subscriptionId: Number.parseInt(id),
 | 
				
			||||||
 | 
					                          feedType: FeedTypeEnum.Rss,
 | 
				
			||||||
 | 
					                          feedSource: FeedSourceEnum.SubscriptionEpisode,
 | 
				
			||||||
 | 
					                        },
 | 
				
			||||||
 | 
					                      },
 | 
				
			||||||
 | 
					                    })
 | 
				
			||||||
 | 
					                  }
 | 
				
			||||||
 | 
					                >
 | 
				
			||||||
 | 
					                  <PlusIcon className="h-4 w-4" />
 | 
				
			||||||
 | 
					                  Add Feed
 | 
				
			||||||
 | 
					                </Button>
 | 
				
			||||||
 | 
					              </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					              <div className="grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-3">
 | 
				
			||||||
 | 
					                {subscription.feed?.nodes &&
 | 
				
			||||||
 | 
					                subscription.feed.nodes.length > 0 ? (
 | 
				
			||||||
 | 
					                  subscription.feed.nodes.map((feed) => (
 | 
				
			||||||
 | 
					                    <Card
 | 
				
			||||||
 | 
					                      key={feed.id}
 | 
				
			||||||
 | 
					                      className="group relative cursor-pointer p-4 transition-colors hover:bg-accent/50"
 | 
				
			||||||
 | 
					                      onClick={() => {
 | 
				
			||||||
 | 
					                        window.open(`/api/feeds/rss/${feed.token}`, '_blank');
 | 
				
			||||||
 | 
					                      }}
 | 
				
			||||||
 | 
					                    >
 | 
				
			||||||
 | 
					                      <div className="flex flex-col space-y-2">
 | 
				
			||||||
 | 
					                        <div className="flex items-center justify-between">
 | 
				
			||||||
 | 
					                          <Label className="whitespace-nowrap font-medium text-sm capitalize">
 | 
				
			||||||
 | 
					                            <span>{feed.feedType} Feed</span>
 | 
				
			||||||
 | 
					                          </Label>
 | 
				
			||||||
 | 
					                          <Button
 | 
				
			||||||
 | 
					                            variant="ghost"
 | 
				
			||||||
 | 
					                            size="sm"
 | 
				
			||||||
 | 
					                            className="h-6 w-6 p-0 opacity-0 transition-opacity group-hover:opacity-100"
 | 
				
			||||||
 | 
					                            onClick={(e) => {
 | 
				
			||||||
 | 
					                              e.stopPropagation();
 | 
				
			||||||
 | 
					                              deleteFeed({
 | 
				
			||||||
 | 
					                                variables: {
 | 
				
			||||||
 | 
					                                  filters: {
 | 
				
			||||||
 | 
					                                    id: {
 | 
				
			||||||
 | 
					                                      eq: feed.id,
 | 
				
			||||||
 | 
					                                    },
 | 
				
			||||||
 | 
					                                  },
 | 
				
			||||||
 | 
					                                },
 | 
				
			||||||
 | 
					                              });
 | 
				
			||||||
 | 
					                            }}
 | 
				
			||||||
 | 
					                          >
 | 
				
			||||||
 | 
					                            <Trash2 className="h-3 w-3 text-destructive" />
 | 
				
			||||||
 | 
					                          </Button>
 | 
				
			||||||
 | 
					                        </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        <code className="break-all rounded bg-muted px-2 py-1 font-mono text-xs">
 | 
				
			||||||
 | 
					                          {feed.token}
 | 
				
			||||||
 | 
					                        </code>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        <div className="text-muted-foreground text-xs">
 | 
				
			||||||
 | 
					                          {format(new Date(feed.createdAt), 'MM-dd HH:mm')}
 | 
				
			||||||
 | 
					                        </div>
 | 
				
			||||||
 | 
					                      </div>
 | 
				
			||||||
 | 
					                    </Card>
 | 
				
			||||||
 | 
					                  ))
 | 
				
			||||||
 | 
					                ) : (
 | 
				
			||||||
 | 
					                  <div className="col-span-full py-8 text-center text-muted-foreground">
 | 
				
			||||||
 | 
					                    No associated feeds now
 | 
				
			||||||
 | 
					                  </div>
 | 
				
			||||||
 | 
					                )}
 | 
				
			||||||
 | 
					              </div>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            {subscription.bangumi?.nodes &&
 | 
					            {subscription.bangumi?.nodes &&
 | 
				
			||||||
              subscription.bangumi.nodes.length > 0 && (
 | 
					              subscription.bangumi.nodes.length > 0 && (
 | 
				
			||||||
                <>
 | 
					                <>
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user