Skip to content

Commit 2da1212

Browse files
authored
fix: Fixed abort on error during requesting an update (#1181)
* fix: Fixed abort on error during requesting an update * fix: Continue on error in pipeline
1 parent 4cede79 commit 2da1212

6 files changed

Lines changed: 46 additions & 30 deletions

File tree

src/command_line_runner.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,8 @@ pub async fn start_command_line(mut args: Args) -> Result<(), CustomError> {
6767
let podcast = Podcast::get_podcast_by_rss_feed(replaced_feed, conn)
6868
.expect("Error getting podcast");
6969

70-
PodcastEpisodeService::insert_podcast_episodes(podcast.clone())?;
71-
PodcastService::schedule_episode_download(podcast)
70+
PodcastEpisodeService::insert_podcast_episodes(&podcast)?;
71+
PodcastService::schedule_episode_download(&podcast)
7272
}
7373
None => {
7474
println!("Please provide a podcast rss feed url");
@@ -81,8 +81,8 @@ pub async fn start_command_line(mut args: Args) -> Result<(), CustomError> {
8181
for podcast in podcasts {
8282
println!("Refreshing podcast {}", podcast.name);
8383

84-
PodcastEpisodeService::insert_podcast_episodes(podcast.clone())?;
85-
PodcastService::schedule_episode_download(podcast)?;
84+
PodcastEpisodeService::insert_podcast_episodes(&podcast)?;
85+
PodcastService::schedule_episode_download(&podcast)?;
8686
}
8787
Ok(())
8888
}

src/commands/startup.rs

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,18 @@ pub fn run_poll() -> Result<(), CustomError> {
6666
for podcast in podcats_result {
6767
if podcast.active {
6868
let podcast_clone = podcast.clone();
69-
PodcastEpisodeService::insert_podcast_episodes(podcast)?;
70-
PodcastService::schedule_episode_download(podcast_clone)?;
69+
let insert_result = PodcastEpisodeService::insert_podcast_episodes(&podcast);
70+
if let Err(e) = insert_result {
71+
log::error!("Could not insert new podcast episodes for podcast: {} with cause {}",
72+
&podcast.name, e);
73+
continue;
74+
}
75+
let schedule = PodcastService::schedule_episode_download(&podcast_clone);
76+
if let Err(e) = schedule {
77+
log::error!("Could not schedule episode download for podcast: {} with cause {}",
78+
&podcast.name, e);
79+
continue;
80+
}
7181
}
7282
}
7383
Ok(())
@@ -321,7 +331,7 @@ pub fn handle_config_for_server_startup() -> Router {
321331
info!("Polling for new episodes");
322332
match run_poll() {
323333
Ok(_) => {
324-
log::info!("Polling for new episodes successful");
334+
info!("Polling for new episodes successful");
325335
}
326336
Err(e) => {
327337
log::error!("Error polling for new episodes: {}", e);

src/controllers/podcast_controller.rs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -418,7 +418,10 @@ pub async fn refresh_all_podcasts(
418418
let podcasts = Podcast::get_all_podcasts()?;
419419
thread::spawn(move || {
420420
for podcast in podcasts {
421-
PodcastService::refresh_podcast(podcast.clone()).unwrap();
421+
let refresh_result = PodcastService::refresh_podcast(&podcast);
422+
if let Err(e) = refresh_result {
423+
log::error!("Error refreshing podcast: {}", e);
424+
}
422425
ChatServerHandle::broadcast_podcast_refreshed(&podcast);
423426
}
424427
});
@@ -443,7 +446,7 @@ pub async fn download_podcast(
443446
let id_num = from_str::<i32>(&id).unwrap();
444447
let podcast = PodcastService::get_podcast_by_id(id_num);
445448
thread::spawn(move || {
446-
match PodcastService::refresh_podcast(podcast.clone()) {
449+
match PodcastService::refresh_podcast(&podcast) {
447450
Ok(_) => {
448451
log::info!("Succesfully refreshed podcast.");
449452
}
@@ -452,7 +455,7 @@ pub async fn download_podcast(
452455
}
453456
}
454457

455-
let download = PodcastService::schedule_episode_download(podcast.clone());
458+
let download = PodcastService::schedule_episode_download(&podcast);
456459

457460
if download.is_err() {
458461
log::error!("Error downloading podcast: {}", download.err().unwrap());

src/controllers/server.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -205,10 +205,10 @@ impl ChatServerHandle {
205205
);
206206
}
207207

208-
pub fn broadcast_added_podcast_episodes(podcast: Podcast, episodes: Vec<PodcastEpisode>) {
208+
pub fn broadcast_added_podcast_episodes(podcast: &Podcast, episodes: Vec<PodcastEpisode>) {
209209
Self::send_broadcast_sync(
210210
MAIN_ROOM.parse().unwrap(),
211-
&PodcastEpisodesAdded::from((podcast, episodes)),
211+
&PodcastEpisodesAdded::from((podcast.clone(), episodes)),
212212
"addedEpisodes",
213213
);
214214
}

src/service/podcast_episode_service.rs

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ use crate::service::file_service::FileService;
1616
use crate::service::settings_service::SettingsService;
1717
use crate::service::telegram_api::send_new_episode_notification;
1818
use crate::utils::environment_variables::is_env_var_present_and_true;
19-
use crate::utils::error::{map_db_error, CustomError, CustomErrorInner};
19+
use crate::utils::error::{map_db_error, map_reqwest_error, CustomError, CustomErrorInner};
2020
use crate::utils::podcast_builder::PodcastBuilder;
2121
use crate::utils::reqwest_client::get_sync_client;
2222
use diesel::{ExpressionMethods, OptionalExtension, QueryDsl, RunQueryDsl};
@@ -100,10 +100,11 @@ impl PodcastEpisodeService {
100100
}
101101

102102
// Used for creating/updating podcasts
103-
pub fn insert_podcast_episodes(podcast: Podcast) -> Result<Vec<PodcastEpisode>, CustomError> {
103+
pub fn insert_podcast_episodes(podcast: &Podcast) -> Result<Vec<PodcastEpisode>, CustomError> {
104104
let is_redirected = Arc::new(Mutex::new(false)); // Variable to store the redirection status
105105

106-
let returned_data_from_podcast_insert = Self::do_request_to_podcast_server(podcast.clone());
106+
let returned_data_from_podcast_insert = Self::do_request_to_podcast_server(podcast.clone
107+
())?;
107108

108109
let channel = Channel::read_from(returned_data_from_podcast_insert.content.as_bytes());
109110

@@ -122,13 +123,13 @@ impl PodcastEpisodeService {
122123
Self::update_episodes_on_redirect(channel.items())?;
123124
}
124125

125-
Self::handle_itunes_extension(&podcast, &channel)?;
126+
Self::handle_itunes_extension(podcast, &channel)?;
126127

127128
Self::update_podcast_fields(channel.clone(), podcast.id)?;
128129

129130
let mut podcast_inserted = Vec::new();
130131

131-
Self::handle_podcast_image_insert(&podcast, &channel)?;
132+
Self::handle_podcast_image_insert(podcast, &channel)?;
132133

133134
for item in channel.items.iter() {
134135
let itunes_ext = item.clone().itunes_ext;
@@ -289,7 +290,8 @@ impl PodcastEpisodeService {
289290
let new_url = extension.new_feed_url.unwrap();
290291
Podcast::update_podcast_urls_on_redirect(podcast.id, new_url);
291292

292-
let returned_data_from_server = Self::do_request_to_podcast_server(podcast.clone());
293+
let returned_data_from_server = Self::do_request_to_podcast_server(podcast.clone
294+
())?;
293295

294296
let channel =
295297
Channel::read_from(returned_data_from_server.content.as_bytes()).unwrap();
@@ -483,7 +485,7 @@ impl PodcastEpisodeService {
483485
PodcastEpisode::get_podcast_episode_by_id(id_num)
484486
}
485487

486-
fn do_request_to_podcast_server(podcast: Podcast) -> RequestReturnType {
488+
fn do_request_to_podcast_server(podcast: Podcast) -> Result<RequestReturnType, CustomError> {
487489
let is_redirected = Arc::new(Mutex::new(false)); // Variable to store the redirection status
488490
let client = get_sync_client()
489491
.redirect(Policy::custom({
@@ -497,22 +499,23 @@ impl PodcastEpisodeService {
497499
}
498500
}))
499501
.build()
500-
.unwrap();
502+
.map_err(map_reqwest_error)?;
501503
let mut header_map = HeaderMap::new();
502504
header_map.append(
503505
ACCEPT,
506+
// Safe as it is a standard header
504507
"application/rss+xml,application/xml".parse().unwrap(),
505508
);
506509
header_map.append("User-Agent", COMMON_USER_AGENT.parse().unwrap());
507510
let result = client
508511
.get(podcast.clone().rssfeed)
509512
.headers(header_map)
510513
.send()
511-
.unwrap();
514+
.map_err(map_reqwest_error)?;
512515
let url = result.url().clone().to_string();
513-
let content = result.text().unwrap().clone();
516+
let content = result.text().map_err(map_reqwest_error)?;
514517

515-
RequestReturnType { url, content }
518+
Ok(RequestReturnType { url, content })
516519
}
517520

518521
pub(crate) fn delete_podcast_episode_locally(

src/service/rust_service.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -148,13 +148,13 @@ impl PodcastService {
148148
spawn_blocking(move || {
149149
log::debug!("Inserting podcast episodes of {}", podcast.name);
150150
let inserted_podcasts =
151-
PodcastEpisodeService::insert_podcast_episodes(podcast.clone()).unwrap();
151+
PodcastEpisodeService::insert_podcast_episodes(&podcast).unwrap();
152152

153153
ChatServerHandle::broadcast_added_podcast_episodes(
154-
podcast.clone(),
154+
&podcast,
155155
inserted_podcasts.clone(),
156156
);
157-
if let Err(e) = Self::schedule_episode_download(podcast) {
157+
if let Err(e) = Self::schedule_episode_download(&podcast) {
158158
log::error!("Error scheduling episode download: {}", e);
159159
}
160160
})
@@ -168,7 +168,7 @@ impl PodcastService {
168168
}
169169
}
170170

171-
pub fn schedule_episode_download(podcast: Podcast) -> Result<(), CustomError> {
171+
pub fn schedule_episode_download(podcast: &Podcast) -> Result<(), CustomError> {
172172
let settings = Setting::get_settings()?;
173173
let podcast_settings = PodcastSetting::get_settings(podcast.id)?;
174174
match settings {
@@ -199,10 +199,10 @@ impl PodcastService {
199199
}
200200
}
201201

202-
pub fn refresh_podcast(podcast: Podcast) -> Result<(), CustomError> {
202+
pub fn refresh_podcast(podcast: &Podcast) -> Result<(), CustomError> {
203203
log::info!("Refreshing podcast: {}", podcast.name);
204-
PodcastEpisodeService::insert_podcast_episodes(podcast.clone())?;
205-
Self::schedule_episode_download(podcast.clone())
204+
PodcastEpisodeService::insert_podcast_episodes(podcast)?;
205+
Self::schedule_episode_download(podcast)
206206
}
207207

208208
pub fn update_favor_podcast(id: i32, x: bool, username: &str) -> Result<(), CustomError> {

0 commit comments

Comments
 (0)