Skip to content

Commit

Permalink
Added missing Kodi plugin url (#1143)
Browse files Browse the repository at this point in the history
  • Loading branch information
SamTV12345 authored Jan 18, 2025
1 parent 2dcebb3 commit 887ad12
Show file tree
Hide file tree
Showing 3 changed files with 78 additions and 22 deletions.
3 changes: 2 additions & 1 deletion src/adapters/api/controllers/routes.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ use crate::controllers::websocket_controller::{
};
use crate::gpodder::auth::authentication::login;
use crate::gpodder::parametrization::get_client_parametrization;
use crate::gpodder::subscription::subscriptions::{get_subscriptions, upload_subscription_changes};
use crate::gpodder::subscription::subscriptions::{get_subscriptions, get_subscriptions_all, upload_subscription_changes};
use crate::{get_api_config, get_ui_config};
use actix_web::body::{BoxBody, EitherBody};
use actix_web::dev::{ServiceFactory, ServiceRequest, ServiceResponse};
Expand Down Expand Up @@ -65,6 +65,7 @@ fn get_authenticated_gpodder() -> Scope<
.service(post_device)
.service(get_devices_of_user)
.service(get_subscriptions)
.service(get_subscriptions_all)
.service(upload_subscription_changes)
.service(crate::gpodder::episodes::gpodder_episodes::get_episode_actions)
.service(crate::gpodder::episodes::gpodder_episodes::upload_episode_actions)
Expand Down
66 changes: 45 additions & 21 deletions src/gpodder/subscription/subscriptions.rs
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ pub async fn get_subscriptions(
&username,
query.since,
)
.await;
.await;

match res {
Ok(res) => Ok(HttpResponse::Ok().json(res)),
Expand All @@ -52,28 +52,52 @@ pub async fn get_subscriptions(
}
}

#[post("/subscriptions/{username}/{deviceid}.json")]
pub async fn upload_subscription_changes(
upload_request: web::Json<SubscriptionUpdateRequest>,
#[get("/subscriptions/{username}.json")]
pub async fn get_subscriptions_all(
paths: web::Path<String>,
opt_flag: Option<web::ReqData<Session>>,
paths: web::Path<(String, String)>,
query: web::Query<SubscriptionRetrieveRequest>,
) -> Result<HttpResponse, CustomError> {
match opt_flag {
Some(flag) => {
let username = paths.clone().0;
let deviceid = paths.clone().1;
if flag.username != username.clone() {
return Err(CustomErrorInner::Forbidden.into());
}
SubscriptionChangesToClient::update_subscriptions(&deviceid, &username, upload_request)
.await
.unwrap();
let flag_username = match opt_flag {
Some(flag) => flag.into_inner().username,
None => return Err(CustomErrorInner::Forbidden.into()),
};
if flag_username != paths.into_inner().as_str() {
return Err(CustomErrorInner::Forbidden.into());
}

Ok(HttpResponse::Ok().json(SubscriptionPostResponse {
update_urls: vec![],
timestamp: get_current_timestamp(),
}))
}
None => Err(CustomErrorInner::Forbidden.into()),
let res = SubscriptionChangesToClient::get_user_subscriptions(&flag_username, query.since)
.await;

match res {
Ok(res) => Ok(HttpResponse::Ok().json(res)),
Err(_) => Ok(HttpResponse::InternalServerError().finish()),
}
}


#[post("/subscriptions/{username}/{deviceid}.json")]
pub async fn upload_subscription_changes(
upload_request: web::Json<SubscriptionUpdateRequest>,
opt_flag: Option<web::ReqData<Session>>,
paths: web::Path<(String, String)>,
) -> Result<HttpResponse, CustomError> {
match opt_flag {
Some(flag) => {
let username = paths.clone().0;
let deviceid = paths.clone().1;
if flag.username != username.clone() {
return Err(CustomErrorInner::Forbidden.into());
}
SubscriptionChangesToClient::update_subscriptions(&deviceid, &username, upload_request)
.await
.unwrap();

Ok(HttpResponse::Ok().json(SubscriptionPostResponse {
update_urls: vec![],
timestamp: get_current_timestamp(),
}))
}
None => Err(CustomErrorInner::Forbidden.into()),
}
}
31 changes: 31 additions & 0 deletions src/models/subscription.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ use diesel::OptionalExtension;
use diesel::{AsChangeset, Insertable, Queryable, QueryableByName};
use serde::{Deserialize, Serialize};
use utoipa::ToSchema;
use crate::utils::error::{map_db_error, CustomError};

#[derive(
Debug,
Expand Down Expand Up @@ -104,6 +105,36 @@ impl SubscriptionChangesToClient {
})
}


pub async fn get_user_subscriptions(username: &str,since: i32) ->
Result<SubscriptionChangesToClient, CustomError> {
let since = DateTime::from_timestamp(since as i64, 0)
.map(|v| v.naive_utc())
.unwrap();
let res: Vec<Subscription> = subscriptions::table
.filter(subscriptions::username.eq(username))
.filter(
subscriptions::created.gt(since),
)
.load::<Subscription>(&mut get_connection())
.map_err(map_db_error)?;

let (deleted_subscriptions, created_subscriptions): (Vec<Subscription>, Vec<Subscription>) =
res.into_iter().partition(|c| c.deleted.is_some());

Ok(SubscriptionChangesToClient {
add: created_subscriptions
.into_iter()
.map(|c| c.podcast)
.collect(),
remove: deleted_subscriptions
.into_iter()
.map(|c| c.podcast)
.collect(),
timestamp: get_current_timestamp(),
})
}

pub async fn update_subscriptions(
device_id: &str,
username: &str,
Expand Down

0 comments on commit 887ad12

Please sign in to comment.