Profiles: Expose submission visibility settings
This commit is contained in:
parent
50ef8bb85f
commit
2a85cb6661
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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();
|
||||
|
||||
|
|
Loading…
Reference in a new issue