Skip to content

Commit d259137

Browse files
SamTV12345SamTV12345
andauthored
Migrate/actix ws (#907)
* Began migrating to actix ws. * Fixed cargo clippy --------- Co-authored-by: SamTV12345 <noreply+samtv1235@github.com>
1 parent a7ea8a6 commit d259137

File tree

16 files changed

+1079
-848
lines changed

16 files changed

+1079
-848
lines changed

Cargo.lock

Lines changed: 496 additions & 589 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,14 @@ actix-files = "0.6.6"
3232
actix-web = {version="4.9.0", features=["rustls"]}
3333
jsonwebtoken = {version="9.3.0"}
3434
log = "0.4.22"
35-
futures-util = "0.3.29"
35+
futures-util = "0.3.30"
3636
substring = "1.4.5"
3737
opml = "1.1.6"
3838
rand = "0.8.5"
3939
env_logger = "0.11.5"
4040
chrono = {version = "0.4.38", default-features=false, features = ["serde"]}
41-
actix-web-actors = "4.3.1"
42-
rss = "2.0.8"
41+
rss = "2.0.9"
42+
actix-ws = "0.3.0"
4343
frankenstein = "0.32.4"
4444
regex = "1.10.6"
4545
xml-builder = "0.5.2"
@@ -58,7 +58,7 @@ serde_json = "1.0.127"
5858
dotenv = "0.15.0"
5959
thiserror = "1.0.63"
6060
sha1 = "0.10.6"
61-
sha256 = "1.4.0"
61+
sha256 = "1.5.0"
6262
strfmt="0.2.4"
6363
urlencoding="2.1.3"
6464
id3 = "1.14.0"

src/constants/inner_constants.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,3 +142,6 @@ pub static ITUNES: &str = "itunes";
142142
pub const REVERSE_PROXY: &str = "REVERSE_PROXY";
143143
pub const REVERSE_PROXY_HEADER: &str = "REVERSE_PROXY_HEADER";
144144
pub const REVERSE_PROXY_AUTO_SIGN_UP: &str = "REVERSE_PROXY_AUTO_SIGN_UP";
145+
146+
147+
pub const MAIN_ROOM: &str = "main";

src/controllers/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,4 @@ pub mod user_controller;
1010
pub mod watch_time_controller;
1111
pub mod web_socket;
1212
pub mod websocket_controller;
13+
pub mod server;

src/controllers/podcast_controller.rs

Lines changed: 42 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,13 @@
1-
use crate::constants::inner_constants::{
2-
PodcastType, BASIC_AUTH, COMMON_USER_AGENT, DEFAULT_IMAGE_URL, ENVIRONMENT_SERVICE, OIDC_AUTH,
3-
};
1+
use crate::constants::inner_constants::{PodcastType, BASIC_AUTH, COMMON_USER_AGENT, DEFAULT_IMAGE_URL, ENVIRONMENT_SERVICE, MAIN_ROOM, OIDC_AUTH};
42
use crate::models::dto_models::PodcastFavorUpdateModel;
53
use crate::models::misc_models::{PodcastAddModel, PodcastInsertModel};
64
use crate::models::opml_model::OpmlModel;
75
use crate::models::search_type::SearchType::{ITunes, Podindex};
8-
use crate::models::web_socket_message::Lobby;
96
use crate::service::environment_service::EnvironmentService;
107
use crate::service::mapping_service::MappingService;
118
use crate::service::podcast_episode_service::PodcastEpisodeService;
129
use crate::service::rust_service::PodcastService;
1310
use crate::{get_default_image, unwrap_string, DbPool};
14-
use actix::Addr;
1511
use actix_web::dev::PeerAddr;
1612
use actix_web::http::Method;
1713
use actix_web::web::{Data, Json, Path};
@@ -239,7 +235,7 @@ tag="podcasts"
239235
#[post("/podcast/itunes")]
240236
pub async fn add_podcast(
241237
track_id: web::Json<PodcastAddModel>,
242-
lobby: Data<Addr<Lobby>>,
238+
lobby: Data<ChatServerHandle>,
243239
conn: Data<DbPool>,
244240
requester: Option<web::ReqData<User>>,
245241
) -> Result<HttpResponse, CustomError> {
@@ -290,7 +286,7 @@ tag="podcasts"
290286
#[post("/podcast/feed")]
291287
pub async fn add_podcast_by_feed(
292288
rss_feed: web::Json<PodcastRSSAddModel>,
293-
lobby: Data<Addr<Lobby>>,
289+
lobby: Data<ChatServerHandle>,
294290
podcast_service: Data<Mutex<PodcastService>>,
295291
conn: Data<DbPool>,
296292
requester: Option<web::ReqData<User>>,
@@ -349,7 +345,7 @@ tag="podcasts"
349345
#[post("/podcast/opml")]
350346
pub async fn import_podcasts_from_opml(
351347
opml: web::Json<OpmlModel>,
352-
lobby: Data<Addr<Lobby>>,
348+
lobby: Data<ChatServerHandle>,
353349
conn: Data<DbPool>,
354350
requester: Option<web::ReqData<User>>,
355351
) -> Result<HttpResponse, CustomError> {
@@ -388,7 +384,7 @@ tag="podcasts"
388384
#[post("/podcast/podindex")]
389385
pub async fn add_podcast_from_podindex(
390386
id: web::Json<PodcastAddModel>,
391-
lobby: Data<Addr<Lobby>>,
387+
lobby: Data<ChatServerHandle>,
392388
conn: Data<DbPool>,
393389
requester: Option<web::ReqData<User>>,
394390
) -> Result<HttpResponse, CustomError> {
@@ -424,7 +420,7 @@ pub async fn add_podcast_from_podindex(
424420

425421
fn start_download_podindex(
426422
id: i32,
427-
lobby: Data<Addr<Lobby>>,
423+
lobby: Data<ChatServerHandle>,
428424
conn: &mut DbConnection,
429425
) -> Result<Podcast, CustomError> {
430426
let rt = tokio::runtime::Runtime::new().unwrap();
@@ -464,7 +460,7 @@ tag="podcasts"
464460
)]
465461
#[post("/podcast/all")]
466462
pub async fn refresh_all_podcasts(
467-
lobby: Data<Addr<Lobby>>,
463+
lobby: Data<ChatServerHandle>,
468464
podcast_service: Data<Mutex<PodcastService>>,
469465
conn: Data<DbPool>,
470466
requester: Option<web::ReqData<User>>,
@@ -485,13 +481,13 @@ pub async fn refresh_all_podcasts(
485481
conn.get().map_err(map_r2d2_error).unwrap().deref_mut(),
486482
)
487483
.unwrap();
488-
lobby.clone().do_send(BroadcastMessage {
484+
lobby.send_broadcast_sync(MAIN_ROOM.parse().unwrap(), serde_json::to_string(&BroadcastMessage {
489485
podcast_episode: None,
490486
type_of: PodcastType::RefreshPodcast,
491487
message: format!("Refreshed podcast: {}", podcast.name),
492488
podcast: Option::from(podcast.clone()),
493489
podcast_episodes: None,
494-
});
490+
}).unwrap());
495491
}
496492
});
497493
Ok(HttpResponse::Ok().into())
@@ -506,7 +502,7 @@ tag="podcasts"
506502
#[post("/podcast/{id}/refresh")]
507503
pub async fn download_podcast(
508504
id: Path<String>,
509-
lobby: Data<Addr<Lobby>>,
505+
lobby: Data<ChatServerHandle>,
510506
podcast_service: Data<Mutex<PodcastService>>,
511507
conn: Data<DbPool>,
512508
requester: Option<web::ReqData<User>>,
@@ -621,7 +617,7 @@ pub async fn update_active_podcast(
621617
async fn insert_outline(
622618
podcast: Outline,
623619
client: Client,
624-
lobby: Data<Addr<Lobby>>,
620+
lobby: Data<ChatServerHandle>,
625621
mut rng: ThreadRng,
626622
environment: EnvironmentService,
627623
conn: Data<DbPool>,
@@ -647,13 +643,13 @@ async fn insert_outline(
647643

648644
let feed_response = client.get(feed_url.unwrap()).send().await;
649645
if feed_response.is_err() {
650-
lobby.do_send(BroadcastMessage {
646+
lobby.send_broadcast(MAIN_ROOM.parse().unwrap(),serde_json::to_string(&BroadcastMessage {
651647
type_of: PodcastType::OpmlErrored,
652648
message: feed_response.err().unwrap().to_string(),
653649
podcast: None,
654650
podcast_episodes: None,
655651
podcast_episode: None,
656-
});
652+
}).unwrap()).await;
657653
return;
658654
}
659655
let content = feed_response.unwrap().bytes().await.unwrap();
@@ -689,35 +685,43 @@ async fn insert_outline(
689685
)
690686
.await;
691687
match inserted_podcast {
692-
Ok(podcast) => lobby.do_send(BroadcastMessage {
693-
type_of: PodcastType::OpmlAdded,
694-
message: "Refreshed podcasts".to_string(),
695-
podcast: Option::from(podcast),
696-
podcast_episodes: None,
697-
podcast_episode: None,
698-
}),
699-
Err(e) => lobby.do_send(BroadcastMessage {
700-
type_of: PodcastType::OpmlErrored,
701-
message: e.to_string(),
702-
podcast: None,
703-
podcast_episodes: None,
704-
podcast_episode: None,
705-
}),
688+
Ok(podcast) => {
689+
690+
let _ = lobby.send_broadcast(MAIN_ROOM.parse().unwrap(), serde_json::to_string(&BroadcastMessage {
691+
type_of: PodcastType::OpmlAdded,
692+
message: "Refreshed podcasts".to_string(),
693+
podcast: Option::from(podcast),
694+
podcast_episodes: None,
695+
podcast_episode: None,
696+
}).unwrap()).await;
697+
},
698+
Err(e) => {
699+
let _ = lobby.send_broadcast(MAIN_ROOM.parse().unwrap(), serde_json::to_string(&BroadcastMessage {
700+
type_of: PodcastType::OpmlErrored,
701+
message: e.to_string(),
702+
podcast: None,
703+
podcast_episodes: None,
704+
podcast_episode: None,
705+
}).unwrap()).await;
706+
},
706707
}
707708
}
708-
Err(e) => lobby.do_send(BroadcastMessage {
709-
type_of: PodcastType::OpmlErrored,
710-
message: e.to_string(),
711-
podcast: None,
712-
podcast_episodes: None,
713-
podcast_episode: None,
714-
}),
709+
Err(e) => {
710+
let _ = lobby.send_broadcast(MAIN_ROOM.parse().unwrap(),serde_json::to_string(&BroadcastMessage {
711+
type_of: PodcastType::OpmlErrored,
712+
message: e.to_string(),
713+
podcast: None,
714+
podcast_episodes: None,
715+
podcast_episode: None,
716+
}).unwrap()).await;
717+
},
715718
}
716719
}
717720
use crate::models::episode::Episode;
718721
use utoipa::ToSchema;
719722

720723
use crate::controllers::podcast_episode_controller::EpisodeFormatDto;
724+
use crate::controllers::server::ChatServerHandle;
721725
use crate::controllers::websocket_controller::RSSAPiKey;
722726
use crate::models::podcast_settings::PodcastSetting;
723727
use crate::models::settings::Setting;

src/controllers/podcast_episode_controller.rs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,16 @@
1-
use crate::constants::inner_constants::PodcastType;
1+
use crate::constants::inner_constants::{PodcastType, MAIN_ROOM};
22
use crate::db::TimelineItem;
33
use crate::models::episode::Episode;
44
use crate::models::favorites::Favorite;
55
use crate::models::messages::BroadcastMessage;
66
use crate::models::podcast_episode::PodcastEpisode;
77
use crate::models::podcasts::Podcast;
88
use crate::models::user::User;
9-
use crate::models::web_socket_message::Lobby;
109

1110
use crate::service::mapping_service::MappingService;
1211
use crate::service::podcast_episode_service::PodcastEpisodeService;
1312
use crate::utils::error::{map_r2d2_error, CustomError};
1413
use crate::DbPool;
15-
use actix::Addr;
1614
use actix_web::web::{Data, Json, Query};
1715
use actix_web::{delete, get, post, put};
1816
use actix_web::{web, HttpResponse};
@@ -22,6 +20,7 @@ use std::ops::DerefMut;
2220
use crate::models::settings::Setting;
2321
use crate::service::file_service::perform_episode_variable_replacement;
2422
use std::thread;
23+
use crate::controllers::server::ChatServerHandle;
2524

2625
#[derive(Debug, Serialize, Deserialize, Clone)]
2726
pub struct OptionalId {
@@ -214,7 +213,7 @@ pub async fn delete_podcast_episode_locally(
214213
id: web::Path<String>,
215214
requester: Option<web::ReqData<User>>,
216215
db: Data<DbPool>,
217-
lobby: Data<Addr<Lobby>>,
216+
lobby: Data<ChatServerHandle>,
218217
) -> Result<HttpResponse, CustomError> {
219218
if !requester.unwrap().is_privileged_user() {
220219
return Err(CustomError::Forbidden);
@@ -224,13 +223,13 @@ pub async fn delete_podcast_episode_locally(
224223
&id.into_inner(),
225224
&mut db.get().unwrap(),
226225
)?;
227-
lobby.do_send(BroadcastMessage {
226+
lobby.send_broadcast(MAIN_ROOM.parse().unwrap(),serde_json::to_string(&BroadcastMessage {
228227
podcast_episode: Some(delted_podcast_episode),
229228
podcast_episodes: None,
230229
type_of: PodcastType::DeletePodcastEpisode,
231230
podcast: None,
232231
message: "Deleted podcast episode locally".to_string(),
233-
});
232+
}).unwrap()).await;
234233

235234
Ok(HttpResponse::NoContent().finish())
236235
}

0 commit comments

Comments
 (0)