mirror of
https://github.com/stoatchat/stoatchat.git
synced 2026-07-14 13:36:59 +00:00
feat: add role icon support (#724)
Signed-off-by: ispik <ispik@ispik.dev>
This commit is contained in:
@@ -70,6 +70,7 @@ auto_derived!(
|
||||
LegacyGroupIcon,
|
||||
ChannelIcon,
|
||||
ServerIcon,
|
||||
RoleIcon,
|
||||
}
|
||||
|
||||
/// Information about what the file was used for
|
||||
@@ -239,4 +240,23 @@ impl File {
|
||||
)
|
||||
.await
|
||||
}
|
||||
|
||||
/// Use a file for a role icon
|
||||
pub async fn use_role_icon(
|
||||
db: &Database,
|
||||
id: &str,
|
||||
parent: &str,
|
||||
uploader_id: &str,
|
||||
) -> Result<File> {
|
||||
db.find_and_use_attachment(
|
||||
id,
|
||||
"icons",
|
||||
FileUsedFor {
|
||||
id: parent.to_owned(),
|
||||
object_type: FileUsedForType::RoleIcon,
|
||||
},
|
||||
uploader_id.to_owned(),
|
||||
)
|
||||
.await
|
||||
}
|
||||
}
|
||||
|
||||
@@ -86,6 +86,9 @@ auto_derived_partial!(
|
||||
/// Ranking of this role
|
||||
#[serde(default)]
|
||||
pub rank: i64,
|
||||
/// Custom icon attachment
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
pub icon: Option<File>,
|
||||
},
|
||||
"PartialRole"
|
||||
);
|
||||
@@ -129,6 +132,7 @@ auto_derived!(
|
||||
/// Optional fields on server object
|
||||
pub enum FieldsRole {
|
||||
Colour,
|
||||
Icon,
|
||||
}
|
||||
);
|
||||
|
||||
@@ -305,6 +309,7 @@ impl Role {
|
||||
colour: self.colour,
|
||||
hoist: Some(self.hoist),
|
||||
rank: Some(self.rank),
|
||||
icon: self.icon,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -318,6 +323,7 @@ impl Role {
|
||||
colour: None,
|
||||
hoist: false,
|
||||
permissions: Default::default(),
|
||||
icon: None,
|
||||
};
|
||||
|
||||
db.insert_role(&server.id, &role).await?;
|
||||
@@ -367,6 +373,7 @@ impl Role {
|
||||
pub fn remove_field(&mut self, field: &FieldsRole) {
|
||||
match field {
|
||||
FieldsRole::Colour => self.colour = None,
|
||||
FieldsRole::Icon => self.icon = None,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -172,6 +172,7 @@ impl IntoDocumentPath for FieldsRole {
|
||||
fn as_path(&self) -> Option<&'static str> {
|
||||
Some(match self {
|
||||
FieldsRole::Colour => "colour",
|
||||
FieldsRole::Icon => "icon",
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user