Skip to content

Commit bac07d2

Browse files
committed
fix mapping user watched progress
1 parent f63de8a commit bac07d2

2 files changed

Lines changed: 27 additions & 17 deletions

File tree

src/model/libraries.rs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -300,6 +300,20 @@ impl ModelController {
300300
}
301301
return Ok(user_id)
302302
}
303+
/// If library_id is None, return user_id unchanged
304+
/// If library_id is Some, return mapped user if any, else user_id unchanged
305+
pub async fn get_optional_library_mapped_user(&self, library_id: Option<&str>, mut user_id: String) -> Result<String> {
306+
if let Some(library_id) = library_id {
307+
let library = self.get_internal_library(library_id).await?.ok_or(SourcesError::UnableToFindLibrary(library_id.to_string(), "get_library_mapped_users".to_string()))?;
308+
if let Some(mapping) = library.settings.map_progress {
309+
if let Some(mapping) = mapping.into_iter().find(|m| m.from == user_id) {
310+
user_id = mapping.to;
311+
}
312+
}
313+
return Ok(user_id)
314+
}
315+
Ok(user_id)
316+
}
303317

304318
pub async fn update_library(&self, library_id: &str, update: ServerLibraryForUpdate, requesting_user: &ConnectedUser) -> Result<Option<super::libraries::ServerLibraryForRead>> {
305319
requesting_user.check_library_role(&library_id, LibraryRole::Admin)?;

src/model/users.rs

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -409,11 +409,12 @@ impl ModelController {
409409
return Ok(vec![])
410410
}
411411
let user_id = user.user_id()?;
412-
let watcheds = self.store.get_watched( query, user_id, vec![]).await?;
412+
let progress_user = self.get_optional_library_mapped_user(library_id.as_deref(), user.user_id()?).await.ok().unwrap_or(user_id);
413+
let watcheds = self.store.get_watched( query, progress_user, vec![]).await?;
413414
Ok(watcheds)
414415
}
415416

416-
pub async fn get_all_watched(&self, user: &ConnectedUser) -> RsResult<Vec<Watched>> {
417+
pub async fn get_all_watched(&self, user: &ConnectedUser) -> RsResult<Vec<Watched>> {
417418
user.check_role(&UserRole::Admin)?;
418419

419420
let watcheds = self.store.get_all_watched().await?;
@@ -458,10 +459,17 @@ impl ModelController {
458459

459460
user.check_role(&UserRole::Read)?;
460461
let user_id = user.user_id()?;
461-
let progress = self.store.get_view_progess( ids, user_id.clone()).await?;
462+
let progress_user = self.get_optional_library_mapped_user(library_id.as_deref(), user.user_id()?).await.ok().unwrap_or(user_id);
463+
let progress = self.store.get_view_progess( ids, progress_user).await?;
462464
Ok(progress)
463465
}
464466

467+
468+
pub async fn get_view_progress_by_id(&self, id: String, user: &ConnectedUser) -> RsResult<Option<ViewProgress>> {
469+
let media_id = RsIds::try_from(id)?;
470+
self.get_view_progress(media_id, user, None).await
471+
}
472+
465473
pub async fn get_all_view_progress(&self, query: HistoryQuery, user: &ConnectedUser, library_id: Option<String>) -> RsResult<Vec<ViewProgress>> {
466474
if matches!(user, ConnectedUser::ServerAdmin) {
467475
return Ok(vec![])
@@ -470,23 +478,11 @@ impl ModelController {
470478

471479
user.check_role(&UserRole::Read)?;
472480
let user_id = user.user_id()?;
473-
let progresses = self.store.get_all_view_progress(query, user_id).await?;
481+
let progress_user = self.get_optional_library_mapped_user(library_id.as_deref(), user.user_id()?).await.ok().unwrap_or(user_id);
482+
let progresses = self.store.get_all_view_progress(query, progress_user).await?;
474483
Ok(progresses)
475484
}
476485

477-
pub async fn get_view_progress_by_id(&self, id: String, user: &ConnectedUser) -> RsResult<Option<ViewProgress>> {
478-
if matches!(user, ConnectedUser::ServerAdmin) {
479-
return Ok(None)
480-
}
481-
482-
user.check_role(&UserRole::Read)?;
483-
let media_id = RsIds::try_from(id)?;
484-
let progress = match user {
485-
ConnectedUser::Server(user) => self.store.get_view_progess( media_id, user.id.clone()).await?,
486-
_ => None
487-
};
488-
Ok(progress)
489-
}
490486

491487
pub async fn get_upload_key(&self, key: String) -> RsResult<UploadKey> {
492488
Ok(self.store.get_upload_key(key).await?)

0 commit comments

Comments
 (0)