fix: fix subscriptions api
This commit is contained in:
@@ -17,7 +17,7 @@ use crate::{
|
||||
MikanBangumiHash, MikanBangumiMeta, build_mikan_bangumi_subscription_rss_url,
|
||||
scrape_mikan_poster_meta_from_image_url,
|
||||
},
|
||||
rawname::parse_episode_meta_from_raw_name,
|
||||
rawname::extract_season_from_title_body,
|
||||
},
|
||||
};
|
||||
|
||||
@@ -29,18 +29,6 @@ pub struct BangumiFilter {
|
||||
pub group: Option<Vec<String>>,
|
||||
}
|
||||
|
||||
#[derive(
|
||||
Clone, Debug, PartialEq, Eq, Serialize, Deserialize, FromJsonQueryResult, SimpleObject,
|
||||
)]
|
||||
pub struct BangumiExtra {
|
||||
pub name_zh: Option<String>,
|
||||
pub s_name_zh: Option<String>,
|
||||
pub name_en: Option<String>,
|
||||
pub s_name_en: Option<String>,
|
||||
pub name_jp: Option<String>,
|
||||
pub s_name_jp: Option<String>,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize, SimpleObject)]
|
||||
#[sea_orm(table_name = "bangumi")]
|
||||
pub struct Model {
|
||||
@@ -63,7 +51,6 @@ pub struct Model {
|
||||
pub poster_link: Option<String>,
|
||||
pub save_path: Option<String>,
|
||||
pub homepage: Option<String>,
|
||||
pub extra: Option<BangumiExtra>,
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)]
|
||||
@@ -135,8 +122,7 @@ impl ActiveModel {
|
||||
let mikan_client = ctx.mikan();
|
||||
let storage_service = ctx.storage();
|
||||
let mikan_base_url = mikan_client.base_url();
|
||||
|
||||
let rawname_meta = parse_episode_meta_from_raw_name(&meta.bangumi_title)?;
|
||||
let (_, season_raw, season_index) = extract_season_from_title_body(&meta.bangumi_title);
|
||||
|
||||
let rss_url = build_mikan_bangumi_subscription_rss_url(
|
||||
mikan_base_url.clone(),
|
||||
@@ -163,20 +149,12 @@ impl ActiveModel {
|
||||
subscriber_id: ActiveValue::Set(subscriber_id),
|
||||
display_name: ActiveValue::Set(meta.bangumi_title.clone()),
|
||||
raw_name: ActiveValue::Set(meta.bangumi_title),
|
||||
season: ActiveValue::Set(rawname_meta.season),
|
||||
season_raw: ActiveValue::Set(rawname_meta.season_raw),
|
||||
season: ActiveValue::Set(season_index),
|
||||
season_raw: ActiveValue::Set(season_raw),
|
||||
fansub: ActiveValue::Set(Some(meta.fansub)),
|
||||
poster_link: ActiveValue::Set(poster_link),
|
||||
homepage: ActiveValue::Set(Some(meta.homepage.to_string())),
|
||||
rss_link: ActiveValue::Set(Some(rss_url.to_string())),
|
||||
extra: ActiveValue::Set(Some(BangumiExtra {
|
||||
name_zh: rawname_meta.name_zh,
|
||||
name_en: rawname_meta.name_en,
|
||||
name_jp: rawname_meta.name_jp,
|
||||
s_name_en: rawname_meta.name_en_no_season,
|
||||
s_name_jp: rawname_meta.name_jp_no_season,
|
||||
s_name_zh: rawname_meta.name_zh_no_season,
|
||||
})),
|
||||
..Default::default()
|
||||
})
|
||||
}
|
||||
@@ -218,15 +196,16 @@ impl Model {
|
||||
Expr::col((
|
||||
subscription_bangumi_alias.clone(),
|
||||
subscription_bangumi::Column::SubscriptionId,
|
||||
)),
|
||||
))
|
||||
.is_not_null(),
|
||||
"is_subscribed",
|
||||
)
|
||||
.join_as_rev(
|
||||
JoinType::LeftJoin,
|
||||
subscription_bangumi::Relation::Bangumi
|
||||
.def()
|
||||
.on_condition(move |_left, right| {
|
||||
Expr::col((right, subscription_bangumi::Column::SubscriptionId))
|
||||
.on_condition(move |left, _right| {
|
||||
Expr::col((left, subscription_bangumi::Column::SubscriptionId))
|
||||
.eq(subscription_id)
|
||||
.into_condition()
|
||||
}),
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
use async_trait::async_trait;
|
||||
use sea_orm::{
|
||||
ActiveValue, FromJsonQueryResult, IntoSimpleExpr, QuerySelect, entity::prelude::*,
|
||||
sea_query::OnConflict,
|
||||
ActiveValue, IntoSimpleExpr, QuerySelect, entity::prelude::*, sea_query::OnConflict,
|
||||
};
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
@@ -11,20 +10,10 @@ use crate::{
|
||||
errors::RecorderResult,
|
||||
extract::{
|
||||
mikan::{MikanEpisodeHash, MikanEpisodeMeta, build_mikan_episode_homepage_url},
|
||||
rawname::parse_episode_meta_from_raw_name,
|
||||
rawname::extract_episode_meta_from_raw_name,
|
||||
},
|
||||
};
|
||||
|
||||
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize, FromJsonQueryResult, Default)]
|
||||
pub struct EpisodeExtra {
|
||||
pub name_zh: Option<String>,
|
||||
pub s_name_zh: Option<String>,
|
||||
pub name_en: Option<String>,
|
||||
pub s_name_en: Option<String>,
|
||||
pub name_jp: Option<String>,
|
||||
pub s_name_jp: Option<String>,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)]
|
||||
#[sea_orm(table_name = "episodes")]
|
||||
pub struct Model {
|
||||
@@ -50,7 +39,6 @@ pub struct Model {
|
||||
pub homepage: Option<String>,
|
||||
pub subtitle: Option<String>,
|
||||
pub source: Option<String>,
|
||||
pub extra: EpisodeExtra,
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)]
|
||||
@@ -135,42 +123,51 @@ impl ActiveModel {
|
||||
episode: MikanEpisodeMeta,
|
||||
) -> RecorderResult<Self> {
|
||||
let mikan_base_url = ctx.mikan().base_url().clone();
|
||||
let rawname_meta = parse_episode_meta_from_raw_name(&episode.episode_title)?;
|
||||
let episode_extention_meta = extract_episode_meta_from_raw_name(&episode.episode_title)
|
||||
.inspect_err(|err| {
|
||||
tracing::error!(
|
||||
err = ?err,
|
||||
episode_title = ?episode.episode_title,
|
||||
"Failed to parse episode extension meta from episode title, skip"
|
||||
);
|
||||
})
|
||||
.ok();
|
||||
let homepage = build_mikan_episode_homepage_url(mikan_base_url, &episode.mikan_episode_id);
|
||||
|
||||
Ok(Self {
|
||||
let mut episode_active_model = Self {
|
||||
mikan_episode_id: ActiveValue::Set(Some(episode.mikan_episode_id)),
|
||||
raw_name: ActiveValue::Set(episode.episode_title.clone()),
|
||||
display_name: ActiveValue::Set(episode.episode_title.clone()),
|
||||
bangumi_id: ActiveValue::Set(bangumi.id),
|
||||
subscriber_id: ActiveValue::Set(bangumi.subscriber_id),
|
||||
resolution: ActiveValue::Set(rawname_meta.resolution),
|
||||
season: ActiveValue::Set(if rawname_meta.season > 0 {
|
||||
rawname_meta.season
|
||||
} else {
|
||||
bangumi.season
|
||||
}),
|
||||
season_raw: ActiveValue::Set(
|
||||
rawname_meta
|
||||
.season_raw
|
||||
.or_else(|| bangumi.season_raw.clone()),
|
||||
),
|
||||
fansub: ActiveValue::Set(rawname_meta.fansub.or_else(|| bangumi.fansub.clone())),
|
||||
poster_link: ActiveValue::Set(bangumi.poster_link.clone()),
|
||||
episode_index: ActiveValue::Set(rawname_meta.episode_index),
|
||||
homepage: ActiveValue::Set(Some(homepage.to_string())),
|
||||
subtitle: ActiveValue::Set(rawname_meta.subtitle),
|
||||
source: ActiveValue::Set(rawname_meta.source),
|
||||
extra: ActiveValue::Set(EpisodeExtra {
|
||||
name_zh: rawname_meta.name_zh,
|
||||
name_en: rawname_meta.name_en,
|
||||
name_jp: rawname_meta.name_jp,
|
||||
s_name_en: rawname_meta.name_en_no_season,
|
||||
s_name_jp: rawname_meta.name_jp_no_season,
|
||||
s_name_zh: rawname_meta.name_zh_no_season,
|
||||
}),
|
||||
season_raw: ActiveValue::Set(bangumi.season_raw.clone()),
|
||||
season: ActiveValue::Set(bangumi.season),
|
||||
fansub: ActiveValue::Set(bangumi.fansub.clone()),
|
||||
poster_link: ActiveValue::Set(bangumi.poster_link.clone()),
|
||||
episode_index: ActiveValue::Set(0),
|
||||
..Default::default()
|
||||
})
|
||||
};
|
||||
|
||||
if let Some(episode_extention_meta) = episode_extention_meta {
|
||||
episode_active_model.episode_index =
|
||||
ActiveValue::Set(episode_extention_meta.episode_index);
|
||||
episode_active_model.subtitle = ActiveValue::Set(episode_extention_meta.subtitle);
|
||||
episode_active_model.source = ActiveValue::Set(episode_extention_meta.source);
|
||||
episode_active_model.resolution = ActiveValue::Set(episode_extention_meta.resolution);
|
||||
if episode_extention_meta.season > 0 {
|
||||
episode_active_model.season = ActiveValue::Set(episode_extention_meta.season);
|
||||
}
|
||||
if episode_extention_meta.season_raw.is_some() {
|
||||
episode_active_model.season_raw =
|
||||
ActiveValue::Set(episode_extention_meta.season_raw);
|
||||
}
|
||||
if episode_extention_meta.fansub.is_some() {
|
||||
episode_active_model.fansub = ActiveValue::Set(episode_extention_meta.fansub);
|
||||
}
|
||||
}
|
||||
|
||||
Ok(episode_active_model)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user