Profiles: Expose submission visibility settings

This commit is contained in:
asonix 2021-02-01 19:02:15 -06:00
parent 50ef8bb85f
commit 2a85cb6661
5 changed files with 44 additions and 3 deletions

View file

@ -414,6 +414,7 @@ pub(super) fn update_note(
title_source: None,
description,
description_source: None,
visibility: Some(find_visibility(note)),
published: Some(published.into()),
removed_files: None,
new_files: None,

View file

@ -291,6 +291,7 @@ pub struct UpdateSubmission {
title_source: Option<String>,
description: Option<String>,
description_source: Option<String>,
visibility: Option<Visibility>,
published: Option<DateTime<Utc>>,
removed_files: Option<Vec<Uuid>>,
new_files: Option<Vec<Uuid>>,
@ -298,7 +299,12 @@ pub struct UpdateSubmission {
}
impl UpdateSubmission {
pub fn from_text(submission_id: Uuid, title: String, description: Option<String>) -> Self {
pub fn from_text(
submission_id: Uuid,
title: String,
description: Option<String>,
visibility: Option<Visibility>,
) -> Self {
let title_source = if title.trim().is_empty() {
None
} else {
@ -319,6 +325,7 @@ impl UpdateSubmission {
title_source,
description: description_source.as_deref().map(|s| bbcode(s, |v| v)),
description_source,
visibility,
published: None,
removed_files: None,
new_files: None,
@ -333,6 +340,7 @@ impl UpdateSubmission {
title_source: None,
description: None,
description_source: None,
visibility: None,
published: None,
removed_files: None,
new_files: Some(vec![file_id]),
@ -347,6 +355,7 @@ impl UpdateSubmission {
title_source: None,
description: None,
description_source: None,
visibility: None,
published: None,
removed_files: Some(vec![file_id]),
new_files: None,
@ -361,6 +370,7 @@ impl UpdateSubmission {
title_source: None,
description: None,
description_source: None,
visibility: None,
published: Some(Utc::now()),
removed_files: None,
new_files: None,

View file

@ -104,7 +104,14 @@ impl Action for UpdateSubmission {
if let Some(description_source) = &self.description_source {
changes.description_source(description_source);
}
let submission = ctx.store.submissions.update(&changes)?;
if let Some(visibility) = self.visibility {
changes.visibility(visibility);
}
let submission = if changes.any_changes() {
ctx.store.submissions.update(&changes)?
} else {
submission
};
let mut removed_file_ids = HashSet::new();
let mut changes = submission.update_files();

View file

@ -426,6 +426,7 @@ impl Submission {
title_source: None,
description: None,
description_source: None,
visibility: None,
published: self.published,
}
}
@ -748,6 +749,7 @@ pub struct SubmissionChanges {
title_source: Option<String>,
description: Option<String>,
description_source: Option<String>,
visibility: Option<Visibility>,
published: Option<DateTime<Utc>>,
}
@ -772,6 +774,11 @@ impl SubmissionChanges {
self
}
pub(crate) fn visibility(&mut self, visibility: Visibility) -> &mut Self {
self.visibility = Some(visibility);
self
}
pub(crate) fn publish(&mut self, time: Option<DateTime<Utc>>) -> &mut Self {
if self.published.is_none() {
self.published = time.or_else(|| Some(Utc::now()));
@ -780,7 +787,10 @@ impl SubmissionChanges {
}
pub(crate) fn any_changes(&self) -> bool {
self.title.is_some() || self.description.is_some() || self.published.is_some()
self.title.is_some()
|| self.description.is_some()
|| self.published.is_some()
|| self.visibility.is_some()
}
}
@ -901,6 +911,16 @@ fn count(
Ok(())
}
impl fmt::Display for Visibility {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match self {
Visibility::Public => write!(f, "Public"),
Visibility::Unlisted => write!(f, "Unlisted"),
Visibility::Followers => write!(f, "Followers"),
}
}
}
impl fmt::Display for OwnerSource {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match self {

View file

@ -153,6 +153,9 @@ impl Store {
if let Some(description_source) = &changes.description_source {
stored_submission.description_source = Some(description_source.clone());
}
if let Some(visibility) = changes.visibility {
stored_submission.visibility = visibility;
}
stored_submission.published = changes.published;
stored_submission.updated_at = Utc::now();