Skip to content

Commit eef6b0d

Browse files
authored
Some common fixes (#868)
* fix(frontend): make query param optional * feat(backend): use native for anilist titles * refactor(backend): change names of vars * fix(backend): delete calendar event when event is gone * fix(frontend): remove URL validation from zod schemas * build(backend): bump version * feat(backend): get name in preferred language always
1 parent f813d2f commit eef6b0d

15 files changed

+73
-59
lines changed

Cargo.lock

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

apps/backend/Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "ryot"
3-
version = "6.2.0"
3+
version = "6.2.1"
44
edition = "2021"
55
repository = "https://github.com/IgnisDa/ryot"
66
license = "GPL-3.0"

apps/backend/src/importer/jellyfin.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ struct ItemResponse {
5050
id: String,
5151
name: String,
5252
#[serde(rename = "Type")]
53-
typ: Option<MediaType>,
53+
type_: Option<MediaType>,
5454
index_number: Option<i32>,
5555
series_id: Option<String>,
5656
series_name: Option<String>,
@@ -115,9 +115,9 @@ pub async fn import(input: DeployUrlAndKeyAndUsernameImportInput) -> Result<Impo
115115
let mut series_id_to_tmdb_id: HashMap<String, Option<String>> = HashMap::new();
116116

117117
for item in library_data.items {
118-
let typ = item.typ.clone().unwrap();
119-
tracing::debug!("Processing item: {:?} ({:?})", item.name, typ);
120-
let (lot, tmdb_id, ssn, sen) = match typ.clone() {
118+
let type_ = item.type_.clone().unwrap();
119+
tracing::debug!("Processing item: {:?} ({:?})", item.name, type_);
120+
let (lot, tmdb_id, ssn, sen) = match type_.clone() {
121121
MediaType::Movie => (MediaLot::Movie, item.provider_ids.unwrap().tmdb, None, None),
122122
MediaType::Series | MediaType::Episode => {
123123
if let Some(series_id) = item.series_id {
@@ -148,7 +148,7 @@ pub async fn import(input: DeployUrlAndKeyAndUsernameImportInput) -> Result<Impo
148148
failed_items.push(ImportFailedItem {
149149
step: ImportFailStep::ItemDetailsFromSource,
150150
identifier: item.name,
151-
error: Some(format!("Unknown media type: {:?}", typ)),
151+
error: Some(format!("Unknown media type: {:?}", type_)),
152152
lot: None,
153153
});
154154
continue;

apps/backend/src/importer/trakt.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -122,8 +122,8 @@ pub async fn import(input: DeployTraktImportInput) -> Result<ImportResult> {
122122
})
123123
.collect_vec();
124124

125-
for typ in ["movies", "shows"] {
126-
let mut rsp = client.get(format!("ratings/{}", typ)).await.unwrap();
125+
for type_ in ["movies", "shows"] {
126+
let mut rsp = client.get(format!("ratings/{}", type_)).await.unwrap();
127127
let ratings: Vec<ListItemResponse> = rsp.body_json().await.unwrap();
128128
for item in ratings.iter() {
129129
match process_item(item) {

apps/backend/src/miscellaneous/resolver.rs

+8
Original file line numberDiff line numberDiff line change
@@ -6539,15 +6539,23 @@ impl MiscellaneousService {
65396539
need_to_delete = true;
65406540
}
65416541
}
6542+
} else {
6543+
need_to_delete = true;
65426544
}
6545+
} else {
6546+
need_to_delete = true;
65436547
}
65446548
} else if let Some(podcast) = cal_event.metadata_podcast_extra_information {
65456549
if let Some(podcast_info) = &meta.podcast_specifics {
65466550
if let Some(ep) = podcast_info.get_episode(podcast.episode) {
65476551
if ep.publish_date != cal_event.date {
65486552
need_to_delete = true;
65496553
}
6554+
} else {
6555+
need_to_delete = true;
65506556
}
6557+
} else {
6558+
need_to_delete = true;
65516559
}
65526560
} else if cal_event.date != meta.publish_date.unwrap() {
65536561
need_to_delete = true;

apps/backend/src/providers/anilist/media_details.graphql

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ query MediaDetailsQuery($id: Int!) {
33
id
44
title {
55
english
6-
userPreferred
6+
native
77
}
88
isAdult
99
episodes
@@ -49,7 +49,7 @@ query MediaDetailsQuery($id: Int!) {
4949
type
5050
title {
5151
english
52-
userPreferred
52+
native
5353
}
5454
coverImage {
5555
extraLarge

apps/backend/src/providers/anilist/media_search.graphql

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ query MediaSearchQuery(
1212
id
1313
title {
1414
english
15-
userPreferred
15+
native
1616
}
1717
coverImage {
1818
extraLarge

apps/backend/src/providers/anilist/mod.rs

+28-18
Original file line numberDiff line numberDiff line change
@@ -271,7 +271,7 @@ impl MediaProvider for NonMediaAnilistService {
271271
(
272272
STUDIO_ROLE.to_owned(),
273273
PartialMetadataWithoutId {
274-
title: data.title.unwrap().user_preferred.unwrap(),
274+
title: data.title.unwrap().native.unwrap(),
275275
identifier: data.id.to_string(),
276276
source: MediaSource::Anilist,
277277
lot: match data.type_.unwrap() {
@@ -350,10 +350,13 @@ impl MediaProvider for NonMediaAnilistService {
350350
.into_iter()
351351
.map(|r| {
352352
let data = r.unwrap().node.unwrap();
353+
let title = data.title.unwrap();
354+
let title =
355+
preferred_language(title.native, title.english, self.base.prefer_english);
353356
(
354357
"Voicing".to_owned(),
355358
PartialMetadataWithoutId {
356-
title: data.title.unwrap().user_preferred.unwrap(),
359+
title,
357360
identifier: data.id.to_string(),
358361
source: MediaSource::Anilist,
359362
lot: match data.type_.unwrap() {
@@ -375,10 +378,16 @@ impl MediaProvider for NonMediaAnilistService {
375378
.into_iter()
376379
.map(|r| {
377380
let data = r.unwrap().node.unwrap();
381+
let title = data.title.unwrap();
382+
let title = preferred_language(
383+
title.native,
384+
title.english,
385+
self.base.prefer_english,
386+
);
378387
(
379388
"Production".to_owned(),
380389
PartialMetadataWithoutId {
381-
title: data.title.unwrap().user_preferred.unwrap(),
390+
title,
382391
identifier: data.id.to_string(),
383392
source: MediaSource::Anilist,
384393
lot: match data.type_.unwrap() {
@@ -627,11 +636,7 @@ async fn media_details(client: &Client, id: &str, prefer_english: bool) -> Resul
627636
.flat_map(|r| {
628637
r.unwrap().media_recommendation.map(|data| {
629638
let title = data.title.unwrap();
630-
let title = if prefer_english {
631-
title.english.or(title.user_preferred).unwrap()
632-
} else {
633-
title.user_preferred.unwrap()
634-
};
639+
let title = preferred_language(title.native, title.english, prefer_english);
635640
PartialMetadataWithoutId {
636641
title,
637642
identifier: data.id.to_string(),
@@ -656,11 +661,7 @@ async fn media_details(client: &Client, id: &str, prefer_english: bool) -> Resul
656661
},
657662
}));
658663
let title = details.title.unwrap();
659-
let title = if prefer_english {
660-
title.english.or(title.user_preferred).unwrap()
661-
} else {
662-
title.user_preferred.unwrap()
663-
};
664+
let title = preferred_language(title.native, title.english, prefer_english);
664665
Ok(MediaDetails {
665666
title,
666667
identifier: details.id.to_string(),
@@ -731,11 +732,7 @@ async fn search(
731732
.flatten()
732733
.map(|b| {
733734
let title = b.title.unwrap();
734-
let title = if prefer_english {
735-
title.english.or(title.user_preferred).unwrap()
736-
} else {
737-
title.user_preferred.unwrap()
738-
};
735+
let title = preferred_language(title.native, title.english, prefer_english);
739736
MetadataSearchItem {
740737
identifier: b.id.to_string(),
741738
title,
@@ -748,3 +745,16 @@ async fn search(
748745
.collect();
749746
Ok((media, total, next_page))
750747
}
748+
749+
fn preferred_language(
750+
native: Option<String>,
751+
english: Option<String>,
752+
prefer_english: bool,
753+
) -> String {
754+
let title = if prefer_english {
755+
english.or(native)
756+
} else {
757+
native
758+
};
759+
title.unwrap()
760+
}

apps/backend/src/providers/anilist/staff_details.graphql

+4-2
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@ query StaffQuery($id: Int!) {
2626
id
2727
type
2828
title {
29-
userPreferred
29+
native
30+
english
3031
}
3132
coverImage {
3233
extraLarge
@@ -41,7 +42,8 @@ query StaffQuery($id: Int!) {
4142
id
4243
type
4344
title {
44-
userPreferred
45+
native
46+
english
4547
}
4648
coverImage {
4749
extraLarge

apps/backend/src/providers/anilist/studio_details.graphql

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ query StudioQuery($id: Int!) {
99
id
1010
type
1111
title {
12-
userPreferred
12+
native
1313
}
1414
coverImage {
1515
extraLarge

apps/backend/src/providers/tmdb.rs

+16-16
Original file line numberDiff line numberDiff line change
@@ -190,13 +190,13 @@ impl TmdbService {
190190

191191
async fn save_all_images(
192192
&self,
193-
typ: &str,
193+
type_: &str,
194194
identifier: &str,
195195
images: &mut Vec<String>,
196196
) -> Result<()> {
197197
let mut rsp = self
198198
.client
199-
.get(format!("{}/{}/images", typ, identifier))
199+
.get(format!("{}/{}/images", type_, identifier))
200200
.await
201201
.map_err(|e| anyhow!(e))?;
202202
let new_images: TmdbImagesResponse = rsp.body_json().await.map_err(|e| anyhow!(e))?;
@@ -225,10 +225,10 @@ impl TmdbService {
225225

226226
async fn get_all_suggestions(
227227
&self,
228-
typ: &str,
228+
type_: &str,
229229
identifier: &str,
230230
) -> Result<Vec<PartialMetadataWithoutId>> {
231-
let lot = match typ {
231+
let lot = match type_ {
232232
"movie" => MediaLot::Movie,
233233
"tv" => MediaLot::Show,
234234
_ => unreachable!(),
@@ -237,7 +237,7 @@ impl TmdbService {
237237
for page in 1.. {
238238
let new_recs: TmdbListResponse = self
239239
.client
240-
.get(format!("{}/{}/recommendations", typ, identifier))
240+
.get(format!("{}/{}/recommendations", type_, identifier))
241241
.query(&json!({ "page": page }))
242242
.unwrap()
243243
.await
@@ -267,12 +267,12 @@ impl TmdbService {
267267

268268
async fn get_all_watch_providers(
269269
&self,
270-
typ: &str,
270+
type_: &str,
271271
identifier: &str,
272272
) -> Result<Vec<WatchProvider>> {
273273
let watch_providers_with_langs: TmdbWatchProviderResponse = self
274274
.client
275-
.get(format!("{}/{}/watch/providers", typ, identifier))
275+
.get(format!("{}/{}/watch/providers", type_, identifier))
276276
.query(&json!({ "language": self.language }))
277277
.unwrap()
278278
.await
@@ -329,7 +329,7 @@ impl TmdbService {
329329
&self,
330330
identifier: &str,
331331
since: DateTimeUtc,
332-
typ: &str,
332+
type_: &str,
333333
) -> Result<bool> {
334334
#[derive(Debug, Serialize, Deserialize, Clone)]
335335
struct TmdbChangesResponse {
@@ -339,7 +339,7 @@ impl TmdbService {
339339
let start_date = since.date_naive();
340340
let changes = self
341341
.client
342-
.get(format!("{}/{}/changes", typ, identifier))
342+
.get(format!("{}/{}/changes", type_, identifier))
343343
.query(&json!({
344344
"start_date": start_date,
345345
"end_date": end_date,
@@ -394,7 +394,7 @@ impl MediaProvider for NonMediaTmdbService {
394394
source_specifics: &Option<PersonSourceSpecifics>,
395395
display_nsfw: bool,
396396
) -> Result<SearchResults<PeopleSearchItem>> {
397-
let typ = match source_specifics {
397+
let type_ = match source_specifics {
398398
Some(PersonSourceSpecifics {
399399
is_tmdb_company: Some(true),
400400
..
@@ -405,7 +405,7 @@ impl MediaProvider for NonMediaTmdbService {
405405
let mut rsp = self
406406
.base
407407
.client
408-
.get(format!("search/{}", typ))
408+
.get(format!("search/{}", type_))
409409
.query(&json!({
410410
"query": query.to_owned(),
411411
"page": page,
@@ -445,7 +445,7 @@ impl MediaProvider for NonMediaTmdbService {
445445
identity: &str,
446446
source_specifics: &Option<PersonSourceSpecifics>,
447447
) -> Result<MetadataPerson> {
448-
let typ = match source_specifics {
448+
let type_ = match source_specifics {
449449
Some(PersonSourceSpecifics {
450450
is_tmdb_company: Some(true),
451451
..
@@ -455,7 +455,7 @@ impl MediaProvider for NonMediaTmdbService {
455455
let details: TmdbNonMediaEntity = self
456456
.base
457457
.client
458-
.get(format!("{}/{}", typ, identity))
458+
.get(format!("{}/{}", type_, identity))
459459
.query(&json!({ "language": self.base.language }))
460460
.unwrap()
461461
.await
@@ -465,7 +465,7 @@ impl MediaProvider for NonMediaTmdbService {
465465
.map_err(|e| anyhow!(e))?;
466466
let mut images = vec![];
467467
self.base
468-
.save_all_images(typ, identity, &mut images)
468+
.save_all_images(type_, identity, &mut images)
469469
.await?;
470470
let images = images
471471
.into_iter()
@@ -474,11 +474,11 @@ impl MediaProvider for NonMediaTmdbService {
474474
.collect();
475475
let description = details.description.or(details.biography);
476476
let mut related = vec![];
477-
if typ == "person" {
477+
if type_ == "person" {
478478
let cred_det: TmdbCreditsResponse = self
479479
.base
480480
.client
481-
.get(format!("{}/{}/combined_credits", typ, identity))
481+
.get(format!("{}/{}/combined_credits", type_, identity))
482482
.query(&json!({ "language": self.base.language }))
483483
.unwrap()
484484
.await

apps/frontend/app/routes/_dashboard.calendar.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ import {
3434
} from "~/lib/utilities.server";
3535

3636
const searchParamsSchema = z.object({
37-
date: z.coerce.date(),
37+
date: z.coerce.date().optional(),
3838
});
3939

4040
export type SearchParams = z.infer<typeof searchParamsSchema>;

apps/frontend/app/routes/_dashboard.settings.imports-and-exports._index.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ export const action = unstable_defineAction(async ({ request }) => {
175175
const usernameImportFormSchema = z.object({ username: z.string() });
176176

177177
const apiUrlImportFormSchema = z.object({
178-
apiUrl: z.string().url(),
178+
apiUrl: z.string(),
179179
});
180180

181181
const urlAndKeyImportFormSchema = apiUrlImportFormSchema.merge(

apps/frontend/app/routes/_dashboard.settings.integrations.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ const createSchema = z.object({
123123
sourceSpecifics: z
124124
.object({
125125
plexUsername: z.string().optional(),
126-
audiobookshelfBaseUrl: z.string().url().optional(),
126+
audiobookshelfBaseUrl: z.string().optional(),
127127
audiobookshelfToken: z.string().optional(),
128128
})
129129
.optional(),

0 commit comments

Comments
 (0)